Android开发之利用ListView动态刷新某个Item
前言
本文实现的是使用ViewHolder来刷新某项数据,而不用每次都全部刷新数据。下面话不多说,来看看详细的介绍。
实现方法
继承BaseAdapter,新建ViewHolder类。
publicclassTestListAdapterextendsBaseAdapter{ privateContextmContext; privateList<String>strList; publicTestListAdapter(Contextcontext,List<String>list){ super(); this.mContext=context; this.strList=list; } @Override publicintgetCount(){ //TODOAuto-generatedmethodstub returnstrList.size(); } @Override publicObjectgetItem(intposition){ //TODOAuto-generatedmethodstub returnposition; } @Override publiclonggetItemId(intposition){ //TODOAuto-generatedmethodstub returnposition; } @Override publicViewgetView(intposition,ViewconvertView,ViewGroupparent){ //TODOAuto-generatedmethodstub ViewHolderholder=null; if(null==convertView){ convertView=LayoutInflater.from(mContext).inflate(R.layout.line,null); holder=newViewHolder(); holder.iDText=(TextView)convertView.findViewById(R.id.textView_id); holder.strText=(TextView)convertView.findViewById(R.id.textView_str); convertView.setTag(holder); }else{ holder=(ViewHolder)convertView.getTag(); } holder.iDText.setText(position+""); Stringstr=strList.get(position); holder.strText.setText(str); returnconvertView; } privatestaticclassViewHolder{ privateTextViewiDText; privateTextViewstrText; } publicvoidupdataView(intposi,ListViewlistView){ intvisibleFirstPosi=listView.getFirstVisiblePosition(); intvisibleLastPosi=listView.getLastVisiblePosition(); if(posi>=visibleFirstPosi&&posi<=visibleLastPosi){ Viewview=listView.getChildAt(posi-visibleFirstPosi); ViewHolderholder=(ViewHolder)view.getTag(); Stringtxt=holder.strText.getText().toString(); txt=txt+"++;"; holder.strText.setText(txt); strList.set(posi,txt); }else{ Stringtxt=strList.get(posi); txt=txt+"++;"; strList.set(posi,txt); } } }
在Activity中,调用updateView()方法,刷新数据。
publicclassMainActivityextendsActivity{ privateMainActivitymContext; privateEditTextidEdit; privateTextViewtextView; privateList<String>strList=newArrayList<String>(); privateListViewlistView; privateTestListAdapterListAdapter; @Override protectedvoidonCreate(BundlesavedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mContext=this; for(inti=0;i<100;i++){ strList.add("testdata"); } idEdit=(EditText)findViewById(R.id.edittext_id); textView=(TextView)findViewById(R.id.textview_modify); listView=(ListView)findViewById(R.id.listview); ListAdapter=newTestListAdapter(mContext,strList); listView.setAdapter(ListAdapter); //动态刷新 textView.setOnClickListener(newOnClickListener(){ @Override publicvoidonClick(Viewv){ //TODOAuto-generatedmethodstub StringidStr=idEdit.getText().toString(); intidInt=Integer.parseInt(idStr); ListAdapter.updataView(idInt,listView);//动态修改 } }); } }
给出布局文件:
<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:background="#FFFFFF" android:orientation="vertical"> <LinearLayout android:layout_width="match_parent" android:layout_height="40dp" android:orientation="horizontal"> <EditText android:id="@+id/edittext_id" android:layout_width="200dp" android:layout_height="wrap_content" android:hint="putmodifyid"/> <TextView android:id="@+id/textview_modify" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="动态修改" android:textColor="#123456"/> </LinearLayout> <ListView android:id="@+id/listview" android:layout_width="match_parent" android:layout_height="wrap_content"> </ListView> </LinearLayout>
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流。