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>
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流。