2012-07-24 51 views
4

我有一個listView在onCreate()中填充,因爲在屏幕旋轉的onCreate()被再次調用它再次填充它,因此每次旋轉後我得到的條目添加我不想要的。 onCreate基本上是:Android:在屏幕旋轉後的listview double條目

@Override 
public void onActivityCreated(Bundle savedInstanceState) 
{ 
    super.onActivityCreated(savedInstanceState); 
    myList = new ArrayList<SingleEntry>(); 
    new getList().execute(); //Async task to fill myList 

    ListView lv = (ListView) getActivity().findViewById(R.id.ListView01); 

    itemAdapter = new ItemAdapterOverview(getActivity().getApplicationContext(), myList); 


    lv.setAdapter(itemAdapter); 
} 

其中myList是一個ArrayList和一個類變量。我在填充之前嘗試了onCreate()來設置一個空適配器,這正是Google向我建議的。但它沒有奏效。

+0

所以你需要持有陣列,如果你把手機對吧? – 2012-07-24 16:14:19

回答

1

您可以保存myList在Android的方法onSaveInstanceState是這樣的:

protected void onSaveInstanceState(Bundle bundle) { 
    bundle.putSerializable("myList", myList); 
    super.onSaveInstanceState(bundle); 
} 

只是要確保通過使SingleEntry使課堂SingleEntrySerializable實施Serializable interface(注:如果您有任何複雜的數據SingleEntry類中的結構,您還應該使它們實現接口Serializable)。然後在你的onCreate你可以使用這樣的事情:

@Override 
public void onActivityCreated(Bundle savedInstanceState) 
{ 
    super.onActivityCreated(savedInstanceState); 

    if(savedInstanceState != null) { //Check if the save instance state is not null 

     //If is not null, retrieve the saved values of the myList variable 
     myList = (ArrayList<SingleEntry>) savedInstanceState.getSerializable("myList"); 

     ListView lv = (ListView) getActivity().findViewById(R.id.ListView01); 

     itemAdapter = new ItemAdapterOverview(getActivity().getApplicationContext(), myList); 

     lv.setAdapter(itemAdapter); 
    } 
    else { //Bundle is empty so you should intialize the myList variable 
     myList = new ArrayList<SingleEntry>(); 
     new getList().execute(); //Async task to fill myList 

     ListView lv = (ListView) getActivity().findViewById(R.id.ListView01); 

     itemAdapter = new ItemAdapterOverview(getActivity().getApplicationContext(), myList); 


     lv.setAdapter(itemAdapter); 
    } 
} 
1

簡單 '速戰速決' 的答案: 呼叫.clear()上的onCreate(你itemAdapter),你也可以嘗試列表適配器上調用.notifyDataSetChanged()。

這將清除適配器中的項目,然後再次添加它們。

不太簡單,但更完整的答案: 另一種方式來做到這一點是通過itemAdapter中的onCreate捆()內看到題爲「保留對象在更改配置」一節http://developer.android.com/guide/topics/resources/runtime-changes.html

2

在你的清單中添加這爲您的列表活動:

android:configChanges="orientation|keyboardHidden|screenSize" 

並覆蓋OnConfigurationChanged方法你的活動這樣的:

@Override 
public void onConfigurationChanged(Configuration newConfig) { 
} 

這不應該叫你onCreate了。