Android: как мне сохранить данные в моем массиве переходов / списков при изменении ориентации? - PullRequest
3 голосов
/ 26 февраля 2010

как указано выше, это делается автоматически? Мой список был пуст, когда ориентация chMYanges? и нет, мне нужно изменение ориентации =)

Мой адаптер

public class ResultsAdapter extends ArrayAdapter<SearchItem> implements Filterable{

private ArrayList<SearchItem> subItems;
private ArrayList<SearchItem> allItems;// = new ArrayList<SearchItem>();
private LayoutInflater inflater;
private PTypeFilter filter;
private OnCheckedChangeListener test;

public ResultsAdapter(Context context, int textViewResourceId, ArrayList<SearchItem> items,OnCheckedChangeListener a) {

    super(context, textViewResourceId, items);
        //this.subItems = items;
        for( int i = 0;i < items.size();i++){
            subItems.add(items.get(i));
        }
        this.allItems = this.subItems;
        inflater= LayoutInflater.from(context);

        test = a;
}

My onCreate

    public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);        



    ListView lvr = (ListView)findViewById(R.id.search_results);



  //  if(savedInstanceState == null){
        this.m_adapter = new ResultsAdapter(home.this, R.layout.listrow, sResultsArr,home.this);
        this.specsAdapter = new FeaturesExpandableAdapter(home.this,new ArrayList<String>(),new ArrayList<ArrayList<Feature>>()); 
   // }
        lvr.setAdapter(this.m_adapter);

спасибо, ребята

Ответы [ 6 ]

20 голосов
/ 26 февраля 2010

Вы также можете использовать http://developer.android.com/reference/android/app/Activity.html#onRetainNonConfigurationInstance()

Как-то так в вашей деятельности:

@Override
public Object onRetainNonConfigurationInstance() {
    return this.m_adapter.getItems();
}

А потом в вашем onCreate ():

@Override
public void onCreate(Bundle icicle) {
    super.onCreate(icicle);

    // more init stuff here

    sResultsArr = (ArrayList<SearchItems>)getLastNonConfigurationInstance();
    if(sResultArr == null) {
        sResultsArray = new ArrayList<SearchItems>();  // or some other initialization
    }

    self.m_adapter = new ResultsAdapter(home.this, R.layout.listrow, sResultsArr,home.this);

    // ...
}
5 голосов
/ 26 февраля 2010

Если у вас есть данные в памяти, которые должны оставаться во время изменения ориентации, вам нужно что-то сделать, чтобы это упорядочить. Лучшее решение - внедрить onSaveInstanceState() и использовать его для хранения ваших данных, потому что это используется не только для изменения ориентации, но и для других ситуаций (например, ваша активность находится в текущем стеке, но она должна быть выгнана оперативной памяти, чтобы освободить место для вещей в стеке).

1 голос
/ 09 января 2012

Я думаю, что вы на неправильном пути. Пожалуйста, найдите время, чтобы увидеть это видео от разработчиков Android: http://www.youtube.com/watch?v=wDBM6wVEO70 (около 1 часа).

Я следил за видео, и мой список работает нормально, когда экран меняет ориентацию: -)

0 голосов
/ 20 апреля 2016

Я решил эту проблему, используя OnSaveInstanceState() и OnRestoreInstanceState()

@Override
    protected void onRestoreInstanceState(Bundle state){
        super.onRestoreInstanceState(state);
        name_array.addAll(state.getStringArrayList("key"));
        setListAdapter(arrayAdapter);
        arrayAdapter.notifyDataSetChanged();
    }

    @Override
    protected void onSaveInstanceState(Bundle outState){
        super.onSaveInstanceState(outState);
        outState.putStringArrayList("key",name_array);
    }

name_array удерживается в ArrayAdapter arrayAdapter = new ArrayAdapter<String>(this ,R.layout.item,name_array);

Теперь, когда вы переходите от альбомной ориентации к книжной и наоборот, данные не теряются

0 голосов
/ 20 августа 2013

Пожалуйста, поместите этот код в файл AndroidManifest.xml.

activity
        android:name="MainActivity"
        android:label="@string/app_name" 
        android:configChanges="keyboardHidden|orientation|screenSize"
0 голосов
/ 26 февраля 2010

Данные не должны быть потеряны при изменении ориентации. Единственное, что я могу себе представить, это то, что компоновка вашей деятельности неправильная, например, элементы управления перемещаются из видимой области после изменения ориентации.

...