列表在更改活动后查看消失

时间:2015-10-06 13:17:46

标签: java android listview android-activity setcontentview

现在已经有好几个小时了,我一直在努力解决一个关于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);
}

2 个答案:

答案 0 :(得分:1)

您在多个位置使用setContentView(),但您没有在其中设置适配器。您可以在事件(UI)线程上运行时调用setContentView。请注意,当您这样做时,您需要重置通过调用findViewById初始化的所有字段。

答案 1 :(得分:1)

而不是:

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

这样做:

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

你正在设置一个空的适配器&amp;然后填充数组

@Skynet指出了另一个问题,感谢