0

我有一個活動和3個片段。在主要活動的底部,我有3個按鈕用於切換活動片段。每個片段都包含一個ListView,你認爲這是一種很好的開發方式嗎?我已經開發了第一個從服務器上下載json的Fragment,解析並添加元素到ListView,但是當我按下按鈕切換到Fragment2時,第一個保持不變。帶有ListView的片段保留

這是主要活動,帶有listView的片段在某些TextView和一個ImageView內使用自定義適配器。如果我刪除listView,碎片更改沒有麻煩。

import android.os.Bundle; 
import android.view.Menu; 
import android.view.View; 
import android.view.Window; 
import android.widget.TextView; 
import android.widget.Toast; 
import android.app.Activity; 
import android.app.Fragment; 
import android.app.FragmentManager; 
import android.app.FragmentTransaction; 

public class Home extends Activity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     this.requestWindowFeature(Window.FEATURE_NO_TITLE); 
     setContentView(R.layout.activity_home); 
    } 

    public void selectFrag(View view) { 
     Fragment fr; 
     int stringTitleID = R.string.title_fragment1; 

     if(view == findViewById(R.id.imgBtn3)) 
     { 
      fr = new FragmentThree(); 
      stringTitleID = R.string.title_fragment3; 
     } 
     else if(view == findViewById(R.id.imgBtn2)) 
     { 
      fr = new FragmentTwo(); 
      stringTitleID = R.string.title_fragment2; 
     } 
     else 
     { 
      fr = new FragmentOne(); 
      stringTitleID = R.string.title_fragment1; 
     } 

     FragmentManager fm = getFragmentManager(); 
     FragmentTransaction fragmentTransaction = fm.beginTransaction(); 
     fragmentTransaction.replace(R.id.fragment_place, fr); 
     fragmentTransaction.commit(); 

     // I change the title in the top_bar 
     TextView textViewActivityTitle = (TextView) findViewById(R.id.textViewActivityTitle); 
     textViewActivityTitle.setText(getResources().getString(stringTitleID).toString()); 

    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.home, menu); 
     return true; 
    } 

    /* 
    * This functions clears the app cache. The json responses are stored in che cacheDir or cacheExternalDir. 
    * I clean them when the app is started. I only use the cache between the Fragments 
    */ 

} 

碎片解決方案是一個很好的解決方案嗎?爲什麼帶有listview的片段保持不變? 我應該使用ListFragment嗎?

非常感謝。

+0

我的問題是在XML。我正在使用而不是

回答

0

我覺得標籤導航是更好,但你可以試試這個:在您的主要活動添加點擊監聽到你的按鈕第一

1),然後用一個參數來區分:

button1.setOnClickListener(new View.OnClickListener(){ 
     @Override 
     public void onClick(View view){ 
      changeFragment(1) 
     } 
}; 

public void changeFragment(int whichfragment){ 
    switch(whichfragment){ 
     case 1: 
     fr=new FragmentOne(); 
     replaceFragment(); 
     break; 
     case 2: 
     fr=new FragmentTwo(); 
     replaceFragment(); 
     break; 
    } 

} 

2)現在,您可以取代你的片段

public void replaceFragment(){ 
    FragmentManager fragmentManager = getFragmentManager(); 
    FragmentTransaction transaction=fragmentManager.beginTransaction(); 
    transaction.replace(R.id.fragment_place, fr); 
transaction.commit(); 
} 
+0

是否有可能自定義按鈕切換標籤?你爲什麼認爲更好?我會盡快測試你的代碼,謝謝! –

+0

是的,你可以創建你自己的按鈕。也許它有幫助: http://stackoverflow.com/questions/18074303/how-to-create-custom-shape-button-with-selector-in-android –