另一个Activity完成后更新并刷新ListView项

时间:2016-07-18 14:45:12

标签: android listview adapter

方案: 我有customAdapterfeeditemsetget数据,ReplyActivityMainActivity

MainActivitydata检索server,并使用ListView将其显示为customAdapterListView btnReply显示customAdapter onClickReplyActivity ReplyActivity已打开。{/ p>

EditText上,我有一个Button和一个onButtonClick,在写完text之后,来自EditText的{​​{1}}为{{ 1}}到send,然后保存在server,而SharedPreferences已关闭,只需调用ReplyActivity而不启动任何finish(),这会将Activity带到使用我的MainActivity的前景。 我已经有了一个逻辑来检测我的Adapter是否被MainActivty foreground带到了finishing

现在我的问题是,我如何仅更新ReplyActivity repStatus导致position btnReply clicked ReplyActivity的地方{/ 1}}?

我搜索了所有与这种情况无关的答案。虽然,我遇到this here on SO,但在这种情况下无法工作。

如果有人可以帮助我如何做到这一点或指出任何可以帮助我实现这一目标的资源将受到高度赞赏。

我的适配器:

    public class FeedListAdapter extends BaseAdapter implements View.OnCreateContextMenuListener {
    private Activity activity;
    private LayoutInflater inflater;

public View getView(final int position, View convertView, ViewGroup parent) {

//        session = new SessionManager(MediaActivity.class);
        if (inflater == null)
            inflater = (LayoutInflater) activity
                    .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        if (convertView == null) {
            convertView = inflater.inflate(R.layout.feed_item, null);
            convertView.setLongClickable(true);
        }

        if (imageLoader == null)
            imageLoader = AppController.getInstance().getImageLoader();

        final TextView name = (TextView)convertView.findViewById(R.id.name);
        final Button btnReply = (Button)convertView.findViewById(R.id.btnReply);
        final TextView statusMsg = (TextView)convertView.findViewById(R.id.txtStatusMsg);
        final TextView repStatus = (TextView)convertView.findViewById(R.id.repStatus);


    btnReply.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(v.getContext(), ReplyActivity.class);
                intent.putExtra("statusId", statusId.getText().toString());
                intent.putExtra("username", userName.getText().toString());
                v.getContext().startActivity(intent);

                }
            });
   } 
}

3 个答案:

答案 0 :(得分:0)

在您的MainActivity中覆盖onResume方法之后,您可以在适配器中使用onResume中的公共方法

注意:OnResume将在OnCreate方法之后第一次被调用,所以要注意这一点并找到一种方法来区分第一个OnResume和下一个OnResume调用之间的区别,这些调用是在您的活动到达前台时触发的

答案 1 :(得分:0)

这里有两个选项 -

最佳做法是拨打startActivityForResult(intent)并覆盖onActivityResult()内的MainActivity回调方法。(guide here

第二个选项是在boolean firstTime = false内设置ShardPreference ReplyActivity并检查onResume内的覆盖MainActivity内部,并检查这是否是第一次。 (onResume在任何时候都会被调用,重新启动UI再次回到前面 - 并且onCreat之后

答案 2 :(得分:0)

您可以使用onResume()方法。

@Override
public void onResume() {
    super.onResume();  // Always call the superclass method first

    // Check here if the text from edittext was saved in sharedpreference or not.

   // Refresh the adapter
   adapter.notifyDataSetChanged()

}

在此处详细说明:https://developer.android.com/training/basics/activity-lifecycle/pausing.html

更新repStatus: 实现onListItemClick。然后,通过id获取视图并更新它。

Android ListView, OnListItemClick find all the views of row