Просмотр списка исчезает после изменения действий

уже несколько часов я боролся с проблемой, связанной с представлениями списка в java, в практическом приложении, которое я пытаюсь сделать. У меня есть представление списка в моем основном действии, и после перехода от этого действия и обратно к нему представление списка исчезло. Я гуглил и видел, как люди меняли вещи и сохраняли экземпляры, и безуспешно пытался реализовать это, возможно, это потому, что я очень новичок в java. Вот код:

public class MainActivity extends AppCompatActivity {
private ArrayList items;
private ArrayAdapter itemsAdapter;
private ListView lvItems;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);


    lvItems = (ListView) findViewById(R.id.lvItems);
    items = new ArrayList();
    itemsAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, items);

    lvItems.setAdapter(itemsAdapter);
    items.add("Test");
    setupListViewListener();

}

// Attaches a long click listener to the listview
private void setupListViewListener() {
    lvItems.setOnItemLongClickListener(
            new AdapterView.OnItemLongClickListener() {
                @Override
                public boolean onItemLongClick(AdapterView<?> adapter,
                                               View item, int pos, long id) {
                    // Remove the item within array at position
                    items.remove(pos);
                    // Refresh the adapter
                    itemsAdapter.notifyDataSetChanged();
                    // Return true consumes the long click event (marks it handled)


                    return true;
                }

            });}

public void onChangeView(View v) {
    setContentView(R.layout.activity_create);
}

public void onConfirmItem(View v) {
    EditText etNewItem = (EditText) findViewById(R.id.etNewItem);
    String itemText = etNewItem.getText().toString();
    itemsAdapter.add(itemText);
    etNewItem.setText("");
    setContentView(R.layout.activity_main);

}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu items for use in the action bar
    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.menu_main, menu);
    return super.onCreateOptionsMenu(menu);
}

person Archie Croston    schedule 06.10.2015    source источник


Ответы (2)


Вместо этого :

lvItems.setAdapter(itemsAdapter);
items.add("Test");

Сделай это :

items.add("Test");
lvItems.setAdapter(itemsAdapter);

вы устанавливаете пустой адаптер, а затем заполняете массив

И на другую проблему указывает @Skynet, спасибо за это

person Syed Nazar Muhammad    schedule 06.10.2015
comment
Да это тоже причина!! - person Skynet; 06.10.2015

Вы используете setContentView() в нескольких местах, но не устанавливаете там адаптер. Вы можете вызывать setContentView в любое время, когда вы работаете в потоке событий (UI). Имейте в виду, что когда вы это сделаете, любые поля, которые вы инициализировали вызовом findViewById, должны быть сброшены.

person Skynet    schedule 06.10.2015