如:item项中有button、textview控件;当点击button项时,改变textView中的值,当显示其他项时,还是原来的数据
关键代码:自定义Adapter类:的关键方法
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
ViewHolder viewHolder = null;
if (convertView == null) {
viewHolder = new ViewHolder();
convertView = View.inflate(context, R.layout.test_item, null);
// viewHolder.btnClick = (Button)convertView.findViewById(R.id.btn_test_item);
viewHolder.ivPicture = (ImageView)convertView.findViewById(R.id.iv_test_item);
viewHolder.tvClickCount = (TextView)convertView.findViewById(R.id.tv_test_item);
convertView.setTag(viewHolder);
}else{
viewHolder = (ViewHolder)convertView.getTag();
}
final ViewHolder holder = viewHolder;
//这个也至关重要:每次滑动listView的item时都会重新调用getVIew()方法:这个是显示数据,如果没有这个,
//由于复用item,就会在其它position的位置显示的是item项的内容
holder.tvClickCount.setText(((TestEntity)getItem(position)).getCount()+"");
viewHolder.btnClick.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
//获取这个实体数据是关键:因为重用convertView,只有本屏的item,每个数据都是放在这个item上,
// 如果不在此获取数据,就会由于放置在item项显示的数据没有改变,item项就会改变
TestEntity test = (TestEntity)getItem(position);
test.setCount(test.getCount()+1);
holder.tvClickCount.setText(test.getCount()+"");
}
});
return convertView;
}
class ViewHolder {
private ImageView ivPicture;// 头像
private Button btnClick;// 按钮
private TextView tvClickCount;// 点击按钮数
}
//实体类:
package com.example.testlayout;
public class TestEntity {
private int count;
public TestEntity() {}
public TestEntity(int count) {
super();
this.count = count;
}
public int getCount() {
return count;
}
public void setCount(int count) {
this.count = count;
}
@Override
public String toString() {
return "TestEntity [count=" + count + "]";
}
}
//Activity:
package com.example.testlayout;
import java.util.ArrayList;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.AdapterView.OnItemSelectedListener;
import android.widget.ListView;
public class MainActivity extends Activity {
private ListView lvTest;
private ArrayList<TestEntity> tests;
private TestAdapter adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
setupView();
getTestData();
setData();
}
private void setData() {
adapter = new TestAdapter(tests, this);
lvTest.setAdapter(adapter);
}
private void setupView() {
lvTest = (ListView)findViewById(R.id.lv_test);
}
/**
* 测试数据
*/
public void getTestData(){
ArrayList<TestEntity> entities = new ArrayList<TestEntity>();
TestEntity entity = null;
for(int i=0;i<30;i++){
entity = new TestEntity(0);
entities.add(entity);
}
this.tests = entities;
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}
//布局;
main.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:tools="http://schemas.android.com/tools"
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity" >
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:weightSum="3.0">
<LinearLayout
android:id="@+id/ll"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1.0"
android:orientation="horizontal">
<ListView
android:id="@+id/lv_test"
android:layout_width="match_parent"
android:layout_height="match_parent"></ListView>
</LinearLayout>
</LinearLayout>
</RelativeLayout>
//test_item.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal" >
<ImageView
android:id="@+id/iv_test_item"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/ic_launcher"/>
<Button
android:id="@+id/btn_test_item"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<TextView
android:id="@+id/tv_test_item"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
</LinearLayout>