android之listView中监听item中某个控件,改变另一个控件的值

如: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>

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值