0

プログラムに疑問があります。

アクション バー (フラグメントで作成) に 3 つのタブがあり、それぞれが異なるビューを表示します。これらのビューには、グラフを表示するためにデータベースから収集する多くの情報があります。問題は、あるタブから別のタブに切り替えるたびに読むには、情報の量が非常に大きいことです。質問: 各ビューを 1 回だけ作成し、それらの間を移動する方法はありますか?

アクティビティ:

    String label1 = "one day";              
    Tab tab = actionBar.newTab();           
    tab.setText(label1);                
    TabListener<Tab1Fragment> tl = new TabListener<Tab1Fragment>(this, label1, Tab1Fragment.class);     
    tab.setTabListener(tl);                     
    actionBar.addTab(tab);                  
    String label2 = "two days";
    tab = actionBar.newTab();
    tab.setText(label2); 
    TabListener<Tab2Fragment> tl2 = new TabListener<Tab2Fragment>(this, label2, Tab2Fragment.class);
    tab.setTabListener(tl2);
    actionBar.addTab(tab);        
    String label3 = "three days";
    tab = actionBar.newTab();
    tab.setText(label3);
    TabListener<Tab3Fragment> tl3 = new TabListener<Tab3Fragment>(this, label3, Tab3Fragment.class);
    tab.setTabListener(tl3);
    actionBar.addTab(tab);

タブ リスナー クラス:

private class TabListener<T extends Fragment> implements ActionBar.TabListener{

    private Fragment fragment;              
    private final Activity activity; 
    private final String tag; 
    private final Class<T> classT; 

    public TabListener(Activity activityTab, String tagTab, Class<T> classTab) { 
        activity = activityTab; 
        tag = tagTab; 
        classT = classTab; 
    } 

    public void onTabReselected(Tab tab, FragmentTransaction ft) {  
    }

    public void onTabSelected(Tab tab, FragmentTransaction ft) {
        if (fragment == null) {                                            
           fragment = Fragment.instantiate(activity, classT.getName()); 
           ft.add(android.R.id.content, fragment, tag); 
       } else { 
           ft.attach(fragment);                            }
    } 

    public void onTabUnselected(Tab tab, FragmentTransaction ft) {
        ft.detach(fragment);
    }

そして、フラグメントの 1 つ (3 つは同じで、R.layout のみを変更します。**):

public class Tab1Fragment extends Fragment {
public View onCreateView (LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){
    setRetainInstance(true);
    return (LinearLayout) inflater.inflate(R.layout.main, container, false);

ありがとうございました!

4

1 に答える 1

0

各フラグメントは、その状態を保持できます。setRetainInstance(true)フラグメント コンストラクターを呼び出します。

次に、まだフェッチされていない場合にのみ、データをフェッチする必要があります (リストにデータを格納する場合は、コンストラクターでそのリストを null に設定し、データをフェッチするときにそれを作成して入力し、onStart メソッドで、 list が null の場合、データを取得します。それ以外の場合は何もしません)。

参照: setRetainInstance を使用した configurationChanges での ListAdapter でのリスト項目の永続化

于 2012-10-23T10:47:49.260 に答える