Java ListView的单个项目未得到更新

Java ListView的单个项目未得到更新,java,android,listview,Java,Android,Listview,在这里,我现在有两个项目的listView,如下图所示 这是用于ListView的SimpleAdapter 在上一个活动中,我再次通过覆盖onActivityResult获得所有值 在这里,我试图更新ListView的单个项,单击该项可提供所有值 @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(req

在这里,我现在有两个项目的listView,如下图所示

这是用于ListView的SimpleAdapter

在上一个活动中,我再次通过覆盖onActivityResult获得所有值

在这里,我试图更新ListView的单个项,单击该项可提供所有值

@Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (requestCode == 1) {
            if(resultCode == RESULT_OK) {
                pdtSupId = data.getStringExtra("pdtSupId");
                strKey = data.getStringExtra("strKey");
                strServQuan = data.getStringExtra("strServQuan");
                strMilkQuan = data.getStringExtra("strMilkQuan");
                strWaterQuan = data.getStringExtra("strWaterQuan");
                strDecocQuan = data.getStringExtra("strDecocQuan");
                strPowderQuan = data.getStringExtra("strPowderQuan");
                int first = listProductSup.getFirstVisiblePosition();
                int last = listProductSup.getLastVisiblePosition();
                for (int i=0; i<=pdtDataList.size(); i++)
                    if (pdtSupIdArr.get(i).equals(pdtSupId))
                        if (i == listItemPos) {
                            View view = listProductSup.getChildAt(i);
                            listProductSup.getAdapter().getView(i, view, listProductSup);
                            ((TextView)view.findViewById(R.id.key_set)).setText(strKey);
                            ((TextView)view.findViewById(R.id.serve_quan_set)).setText(strServQuan);
                            ((TextView)view.findViewById(R.id.milk_quan_set)).setText(strMilkQuan);
                            ((TextView)view.findViewById(R.id.wat_quan_set)).setText(strWaterQuan);
                            ((TextView)view.findViewById(R.id.decoc_quan_set)).setText(strDecocQuan);
                            ((TextView)view.findViewById(R.id.pow_quan_set)).setText(strPowderQuan);
                            break;
                        }
                 pdtAdapter.notifyDataSetChanged();
            }
        }
    }
但我不知道为什么它没有得到更新


为了更新ListView的单个项目,我参考了SO的其他答案。喜欢和其他答案。

您需要更改for循环

 for (int i=0; i<=pdtDataList.size()/.length; i++)
更新


Hi更新活动结果列表中的相应对象,然后调用notifyDatasetChanged,它将自动更新ui…

好,在返回之前更改相应对象中的数据并调用notifyDatasetChanged

或者,您可以从我的项目中获得类似于此示例的方法

private void updateEventInList(boolean likeState, boolean followedState, int comments, int viewsNr, ViewHolder views) {
    if (parentFragment != null && parentFragment instanceof EventListFragment) {
        Log.i(TAG, "Position in list : " + positionInList + "\nlike / follow states : " + likeState + "/" + followedState + "\ncomments number : " + comments + "\nviews number : " + viewsNr);
        ((EventListFragment) parentFragment).updateList(positionInList, likeState, followedState, comments, viewsNr);
    }
}
其中updateList如下所示:

public void updateList(int positionInList, boolean likeState, boolean followedState, int numberOfComments, int numberOfViews) {
    eventsResponses.get(positionInList).setLiked(likeState);
    eventsResponses.get(positionInList).setFollowed(followedState);
    eventsResponses.get(positionInList).setComments(numberOfComments);
    eventsResponses.get(positionInList).setViews(numberOfViews);
    adapter.notifyDataSetChanged();
    Util.hideKeyboard(activity);
}

请注意,我调用了adapter.notifyDataSetChanged。这是listview的适配器。希望这对您有所帮助

您应该更新参考底图数据PDTDatalist,而不是中的文本view@Selvin你能简单地告诉我,我怎样才能在这里更新单个项目的数据。但在这里我也要从第一个项目到最后一个项目。它是等价的,对吗?no int first=listProductSup.getFirstVisiblePosition;int last=listProductSup.getLastVisiblePosition;这会让你们看到物品的位置,你们不会得到清单的完整尺寸,我在我的问题中更新了。请检查ActivityResult方法。我正在执行相同的代码,这里我刚刚更新。它没有得到更新。我正在调用notifyDataSetChanged Event,当它没有得到更新时。我在这里使用2个活动。onBackPressed方法位于第二个活动中,在Backpressed上,所有数据都将发送到上一个活动。我的ListView应该在第一个活动中使用第二个活动返回的数据进行更新。正如我所想的那样:在第二个活动中将调用D private void updateEventList。如果您查看该函数,它将调用public void updateList,在我的案例中,它是第一个活动片段中的一个公共函数,因此您只需使用第一个活动而不是parentFragment.updateList在updateEventList中调用notifyDataSetChanged,但我的适配器和ListView在第一个活动中。不,它在更新通风清单。我在上面展示的私有函数在第二个活动中,公共函数在第一个活动中调用NotifyDataSetChange。我在尝试这个想法,让我知道,在你的情况下,它像我必须做的那样更新了一行listView。请在线,我会告诉你最新情况。
for (int i=0; i<=pdtDataList.length; i++)
                    if (pdtSupIdArr.get(i).equals(pdtSupId))
                        if (i == listItemPos) {
                            View view = listProductSup.getChildAt(i);
                            listProductSup.getAdapter().getView(i, view, listProductSup);
                            ((TextView)view.findViewById(R.id.key_set)).setText(strKey);
                            ((TextView)view.findViewById(R.id.serve_quan_set)).setText(strServQuan);
                            ((TextView)view.findViewById(R.id.milk_quan_set)).setText(strMilkQuan);
                            ((TextView)view.findViewById(R.id.wat_quan_set)).setText(strWaterQuan);
                            ((TextView)view.findViewById(R.id.decoc_quan_set)).setText(strDecocQuan);
                            ((TextView)view.findViewById(R.id.pow_quan_set)).setText(strPowderQuan);
                            break;
                        }
                 pdtAdapter.notifyDataSetChanged();
            }
private void updateEventInList(boolean likeState, boolean followedState, int comments, int viewsNr, ViewHolder views) {
    if (parentFragment != null && parentFragment instanceof EventListFragment) {
        Log.i(TAG, "Position in list : " + positionInList + "\nlike / follow states : " + likeState + "/" + followedState + "\ncomments number : " + comments + "\nviews number : " + viewsNr);
        ((EventListFragment) parentFragment).updateList(positionInList, likeState, followedState, comments, viewsNr);
    }
}
public void updateList(int positionInList, boolean likeState, boolean followedState, int numberOfComments, int numberOfViews) {
    eventsResponses.get(positionInList).setLiked(likeState);
    eventsResponses.get(positionInList).setFollowed(followedState);
    eventsResponses.get(positionInList).setComments(numberOfComments);
    eventsResponses.get(positionInList).setViews(numberOfViews);
    adapter.notifyDataSetChanged();
    Util.hideKeyboard(activity);
}