gpt4 book ai didi

android - 从 ActionBarActivity 更新 listView

转载 作者:行者123 更新时间:2023-11-29 00:12:49 25 4
gpt4 key购买 nike

我的 MainActivity 扩展了 ActionBarActivity,有一个 ListView,我想使用 notifyDataSetChanged() 重新加载它,但我不知道该怎么做。

到目前为止我的代码:

public class MainActivity extends ActionBarActivity {
private JournalEntryDataSource datasource;
private ListView listView = null;

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

datasource = new JournalEntryDataSource(this);
datasource.open();
listView = (ListView) findViewById(R.id.list);
List<JournalEntry> values = datasource.getAllJournalEntries();


listView.setAdapter(new ArrayAdapter<JournalEntry>(this, R.layout.list_item, R.id.lugares, values));



listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
public void onItemClick(AdapterView<?> arg0, View v, int position, long id) {
Log.i("app", "Deleting item number " + position);
datasource.deleteJournalEntry((JournalEntry) listView.getAdapter().getItem(position));

//I would like to do this here:
//ArrayAdapter<JournalEntry> adapter = (ArrayAdapter<JournalEntry>) getListAdapter();
//adapter.notifyDataSetChanged();

}
});


}

但是我在调​​用 adapter.notifyDatasetChanged() 时出错...

有什么建议吗?我一直在看类似的问题,到目前为止还没有运气......--------编辑代码------------

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

datasource = new JournalEntryDataSource(this);
datasource.open();
listView = (ListView) findViewById(R.id.list);
values = datasource.getAllJournalEntries();
listView.setAdapter(new ArrayAdapter<JournalEntry>(this, R.layout.list_item, R.id.lugares, values));
ArrayAdapter<JournalEntry> adapter = (ArrayAdapter<JournalEntry>) getListAdapter();
// use the SimpleCursorAdapter to show the
// elements in a ListView



listView.setAdapter(new ArrayAdapter<JournalEntry>(this, R.layout.list_item, R.id.lugares, values));
listView.setLongClickable(true);
listView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
public boolean onItemLongClick(AdapterView<?> parent, View v, int position, long id) {
Log.i("hola","borrando la posición "+position);
JournalEntry removeMe = (JournalEntry)listView.getAdapter().getItem(position);
values.remove(removeMe);
datasource.deleteJournalEntry(removeMe);
//adapter.notifyDataSetChanged();
reloadMe();


return true;
}
});

}

public void reloadMe(){
//need to do this better... but meh.
Intent intent = new Intent(this, MainActivity.class);
this.startActivity(intent);
}

protected ListView getListView() {
if (listView == null) {
listView = (ListView) findViewById(android.R.id.list);
}
return listView;
}

protected void setListAdapter(ListAdapter adapter) {
getListView().setAdapter(adapter);
}

protected ListAdapter getListAdapter() {
ListAdapter adapter = getListView().getAdapter();
if (adapter instanceof HeaderViewListAdapter) {
return ((HeaderViewListAdapter)adapter).getWrappedAdapter();
} else {
return adapter;
}
}

最佳答案

更新代码的更新答案

您不应再次创建相同的 Activity ,而应选择使用新的值对象设置另一个新的适配器对象。

public void reloadMe(){
//need to do this better... but meh.
//Intent intent = new Intent(this, MainActivity.class);
//this.startActivity(intent);
listView.setAdapter(new ArrayAdapter<JournalEntry>(this, R.layout.list_item, R.id.lugares, values));
}

也许,你正在从

中删除
datasource.deleteJournalEntry((JournalEntry) listView.getAdapter().getItem(position));

但是您没有将“数据源”设置为适配器的数据源。如果你仔细看,你确实设置了“值”列表对象-

listView.setAdapter(new ArrayAdapter<JournalEntry>(this, R.layout.list_item, R.id.lugares, values)); 

也许您可能还需要从值列表中删除。

关于android - 从 ActionBarActivity 更新 listView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28965161/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com