Android 在另一个视图中更改后更新listview

Android 在另一个视图中更改后更新listview,android,listview,Android,Listview,我有一个listView,当您单击plus时,它会导致第二个活动,您可以在其中添加数据并单击OK。单击“确定”时,应更新列表中上一个活动的数据。 我在各种地方尝试了InvalidateView和NotifyDataSetChange,但都不起作用 以下是列表活动: public class EditActivity extends ListActivity { EditAdapter adapter; String itemName; String sectionTopic; @Overri

我有一个listView,当您单击plus时,它会导致第二个活动,您可以在其中添加数据并单击OK。单击“确定”时,应更新列表中上一个活动的数据。 我在各种地方尝试了InvalidateView和NotifyDataSetChange,但都不起作用

以下是列表活动:

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);