Android 在另一个视图中更改后更新listview
我有一个listView,当您单击plus时,它会导致第二个活动,您可以在其中添加数据并单击OK。单击“确定”时,应更新列表中上一个活动的数据。 我在各种地方尝试了InvalidateView和NotifyDataSetChange,但都不起作用 以下是列表活动:Android 在另一个视图中更改后更新listview,android,listview,Android,Listview,我有一个listView,当您单击plus时,它会导致第二个活动,您可以在其中添加数据并单击OK。单击“确定”时,应更新列表中上一个活动的数据。 我在各种地方尝试了InvalidateView和NotifyDataSetChange,但都不起作用 以下是列表活动: public class EditActivity extends ListActivity { EditAdapter adapter; String itemName; String sectionTopic; @Overri
public class EditActivity extends ListActivity {
EditAdapter adapter;
String itemName;
String sectionTopic;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Bundle extra = getIntent().getExtras();
sectionTopic = extra.getString("topic");
View header = getLayoutInflater().inflate(R.layout.header, null);
getListView().addHeaderView(header);
adapter= new EditAdapter(getApplicationContext(),sectionTopic);
setListAdapter(adapter);
}
}
适配器:
public class EditAdapter extends BaseAdapter {
private List<EditSection> arrayList= new ArrayList<EditSection>();
private Context mContext;
String topicNameS;
public EditAdapter(Context mContext, String topicName) {
super();
this.mContext = mContext;
topicNameS = topicName;
arrayList = new ArrayList<EditSection>();
DataModel dataModel = new DataModel(mContext);
List<SectionItems> items = dataModel.getSectionsForTopic(topicName);
for (SectionItems item: items){
double sectionBudget = dataModel.getBudgetForSection(item);
double sectionExpense = dataModel.getSumOfExpensesForSection(item);
arrayList.add(new EditSection(item.getSectionItemsPic(),item.getSectionItemsName(), sectionBudget, sectionExpense));
}
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return arrayList.size();
}
@Override
public Object getItem(int arg0) {
// TODO Auto-generated method stub
return null;
}
@Override
public long getItemId(int arg0) {
// TODO Auto-generated method stub
return 0;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
LayoutInflater inflater = (LayoutInflater) mContext
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
final View vowView = inflater.inflate(R.layout.activity_edit, parent, false);
if (position%2==1){
vowView.setBackgroundColor(Color.rgb(170, 218, 203));
}
else{
vowView.setBackgroundColor(Color.rgb(147, 213, 212));
}
TextView name = (TextView) vowView.findViewById(R.id.name);
TextView budget = (TextView) vowView.findViewById(R.id.budget);
TextView expense = (TextView) vowView.findViewById(R.id.expense);
ImageView pic = (ImageView) vowView.findViewById(R.id.pic);
View itemV = vowView.findViewById(R.id.item);
TextView button = (TextView) vowView.findViewById(R.id.addBtn); return vowView;
}
}
}最简单的建议就是这样做
adapter= new EditAdapter(getApplicationContext(),sectionTopic);
setListAdapter(adapter);
在EditActivity的onResume函数中
正确的方法是调用startActivityForResult,以便您的第二个活动可以传回添加的内容我假设dataModel是一个数据库,它是否正确插入数据?您在哪里调用notifyDataSetChanged?是否更新在EditAdapter构造函数中创建的arrayList?@Mohamed_AbdAllah-插入正确。我想更新,但我不知道在哪里。代码中没有更新。谢谢,它成功了。有没有办法只更新更改而不构建新适配器?因为加载需要很长时间。是的,这将使用startActivityForResult,您的第二个活动将其添加的项定义为结果。
adapter= new EditAdapter(getApplicationContext(),sectionTopic);
setListAdapter(adapter);