通知自定义ListAdapter有关特定对象的更改

时间:2013-01-25 15:16:32

标签: android listview android-activity fragment listview-adapter

我有自定义ListAdapter,它扩展了ArrayAdapter:

private class MyPrivateClassListAdapter extends ArrayAdapter<someObject> {

            private ArrayList<someObject> items;

            public MyPrivateClassListAdapter(Context context, int textViewResourceId, ArrayList<someObject> items) {
                    super(context, textViewResourceId, items);
                    this.items = items;                             
            }

            @Override
            public View getView(int position, View convertView, ViewGroup parent) {
                    View v = convertView;


                    if (v == null)
                    {
                        LayoutInflater vi = (LayoutInflater) getActivity().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                        //cashedHolder=new CashedValuesForListView(convertView);
                        v = vi.inflate(R.layout.some_xml, null);

                    }


                    someObject o = items.get(position);      

                    if (o != null) {    

                                TextView myTxt = (TextView) v.findViewById(R.id.myTextboxId);


                                myText.setText("some text");

                    }
                    return v;
            }
        }

这个ArrayAdapter在我的主要活动中,所以我在点击主要活动时调用它:

  this.m_adapter = new MyPrivateClassListAdapter(getActivity(), R.layout.rows_to_fill, someObject);
         myList.setAdapter(this.m_adapter);

到目前为止一直很好,但问题是,从这个主要活动我调用另一个片段来改变myListview中的值(在某些点击时)(例如它会设置另一个文本)在一个特定的行上。)

我可以在listview中更改值以供短时间通知(在滚动列表之后它会回到旧状态):

int visiblePosition = myList.getFirstVisiblePosition();
View v = mylist.getChildAt(itemIndex - visiblePosition);

 TextView mytextView = (TextView )v.findViewById(R.id.myTextboxId);         
 mytextView.setTxt("I ' va changed");

,执行此操作的正确方法是什么(告诉自定义适配器数据已更改(由实例化片段引起)

谢谢

1 个答案:

答案 0 :(得分:0)

更好的方法是在arraylist中进行更改并通过调用notifyDataSetChanged来通知listview