我想显示一个空列表视图,然后由用户输入填充。我有UI流程工作,并在用户通过setContentView调用的视图(即没有新的Activity)输入一些信息后填充我的自定义对象列表。
我接受输入并将其添加到列表中,我希望在ListView上对其进行汇总。但是,每当我添加到列表和/或ArrayAdapter并调用adapter.notifyDataSetChanged()时,它就不会执行我想要的操作。 ListView仍然是空的。哎呀!这让我疯了!
@Override
public void onCreate(Bundle blah) {
ListView listView = (ListView) findViewById(R.id.results_list);
listView.setAdapter(new ArrayAdapter(this, android.R.layout.simple_list_item_1, list));
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.mnu_add:
final Activity act = this;
setContentView(R.layout.record_details);// the sub-view that takes the user input
// the button on the form to 'add' details:-
((Button) findViewById(R.id.recored_details_add_btn))
.setOnClickListener(
new OnClickListener() {
public void onClick(View v) {
// get input from widgets
list.add(someObject);
((ArrayAdapter<Object>) listView.getAdapter()).notifyDataSetChanged();
setContentView(R.layout.list_view);
}
}
);
((ArrayAdapter<Object>) listView.getAdapter()).notifyDataSetChanged();
break;
}
return true;
}
请把我从痛苦中解救出来并告诉我我的愚蠢行为?
提前致谢。
答案 0 :(得分:2)
public void onClick(View v) {
// get input from widgets
list.add(someObject);
((ArrayAdapter<Object>) listView.getAdapter()).notifyDataSetChanged();
setContentView(R.layout.list_view);
setContentView
处理程序中的onClick
是否可能正在创建列表视图窗口小部件的新实例(没有适配器)或重新初始化列表视图(清除适配器)?
首先尝试在onCreate
的列表中放入一些内容,然后点击按钮时它是否会消失。
我还没有看到任何代码(虽然我是一个相对新手)在活动的生命周期内切换视图,从根本上调出不同的页面 - 大多数使用单独的活动。
编辑:
OP问道:谢谢...那么我怎样才能得到我想要的东西?我支持适配器的列表是静态的;我应该只使用活动而依赖静态字段中的onCreate加载吗?
一些选项:
使用单独的活动
重新关联适配器(再次调用setAdapter
) - 可能是个坏主意
在同一文件中声明两个布局。您将隐藏一个并取消隐藏另一个以在视图之间切换而不是调用setContentView
。这与ListView布局的工作方式类似(一个用于列表为空时,一个用于列表为空时)。我想我已经在网上看到了这个例子,但我现在没有参考。
答案 1 :(得分:1)
您可以在创建意图时使用Intent.FLAG_ACTIVITY_SINGLE_TOP
标记重新启动相同的活动并覆盖onNewIntent()
方法。
在onNewIntent()
内,您使用更新的数据创建适配器并调用setAdapter
。
我认为这会给你预期的行为。