2017-12-19 21 views
-1

tablayoutのタブを切り替える際にパフォーマンスの問題が発生しています。シナリオ1では、レコードが少ないと、タブ間を簡単に切り替えることができ、ユーザーは遅延を犠牲にすることはありません。どこに私がより多くのデータを持っているかのように、ユーザーは、以下のスクリーンショットに示すようなラグを感じることができます。スクリーンは数秒後に読み込まれますが、ユーザーには目に見えます。誰かがこれをさらに改善するためにチェックできる領域を提案することはできますか?以下は、問題と現在のフラグメントのコードが...あるタブを切り替える際の遅延android tablayout

UI -

public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 
    // Inflate the layout for this fragment 
    View view = inflater.inflate(R.layout.fragment_profile, container, false); 
    dbConnection = new databaseHelper(getContext()); 
    dbConnection.getWritableDatabase(); 
    profileFragment = view.findViewById(R.id.profileFragment); 
    downloadData = profileFragment.findViewById(R.id.dwnldData); 
    refresh = profileFragment.findViewById(R.id.refreshdata); 
    search = profileFragment.findViewById(R.id.search); 
    removeFilter= profileFragment.findViewById(R.id.removeFilter); 
    viewPager = (ViewPager) getActivity().findViewById(R.id.viewpager); 
    currmelas = dbConnection.findMelas("YES","YES",""); 

    downloadData.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      viewPager.setCurrentItem(0); 
     } 
    }); 



    if (viewPager.getCurrentItem()==1){ 
     candidateData = dbConnection.findHighCandData(mela_id,"1",""); 
    } else { 
     candidateData = dbConnection.findHighCandData(mela_id,"",""); 
    } 


    if (candidateData.size() <= 0) { 
     if (currmelas.size() == 0){ 
      downloadData.setVisibility(View.VISIBLE); 
      Handler handler = new Handler(); 
      handler.post(new Runnable() { 
       @Override 
       public void run() { 
        if(userSettings.size()==0){ 
         viewPager.setCurrentItem(3); 
        } else { 
         viewPager.setCurrentItem(0); 
        } 
       } 
      }); 

     } 
    } else {    

     new Handler().postDelayed(new Runnable() { 
      @Override 
      public void run() { 
       getActivity().runOnUiThread(new Runnable() { 
        @Override 
        public void run() { 
         setScrollView(candidateData); 
        } 
       }); 
      } 
     }, 100); 

    } 
    return view; 
} 
+0

なぜこれがダウン投票されたのか分かりませんが、私はこれに関する投稿を見つけられませんでした。 – Akshay

答えて

1
は、バックグラウンドワーカーにデータロードを移動

し、UIスレッド上で情報をロードしません。この方法では、タブの切り替えの間にコンテンツを取得している間に遅延することはありません。私は同じ問題を抱えていました。すべてのデータの読み込みを別々のスレッドに移動して、きれいでスムーズなUIを実現する必要がありました。読み込まれた後、キャッシュされたページの数を画面の上限からずらして設定して、各スワイプの再読み込みを避けることが重要であることを確認してください。 here

+0

速い応答をありがとう、私はあなたが提案したオプションを試してみました。私はわずかな改善が見られますが、まだユーザーには見えます。 – Akshay

+0

メッセージを投稿した後、さらに改善するための別の回避策が実現し、うまくいきました。提案ありがとう。 – Akshay

+0

ローダーを使って言及されているように、これは非常に最適化された方法ですが、初めて学ぶのはちょっとです。私は、あなたのコンテンツとリサイクルビューをonBindViewでプルするためにAPIにバックグラウンドタスクを使用していると仮定していましたが、ローカルデータを使用している場合や、asyncTaskLoadersの学習に苦労している場合はhttps:/ /developer.android.com/reference/android/content/AsyncTaskLoader.html – Sam

0

詳細はちょうどそれが他の人のために参考になりますので、私の解決策を共有したいと思いました。私のコードでは、Loopにプロファイルをロードしていたので、約200のプロファイルを持つたびにロードに時間がかかり、ユーザーは遅延を見ることができます。 @Samは、以下のハンドラでコードを移動したと述べ、問題を解決しました。システムはすぐにタブを表示し、データは数秒後にロードされ、これは以前のラグよりも優れています。

new Handler().postDelayed(new Runnable() { 
       @Override 
       public void run() { 
        getActivity().runOnUiThread(new Runnable() { 
         @Override 
         public void run() { 
          setScrollView(candidateData); 
         } 
        }); 
       } 
      }, 100); 
関連する問題