我的ListView 每行有两个Button,和一个EditText
要求是按Button改变EditText的值。现在问题是如何取得EditText代码如下(差不多是照抄网上的实例)package com.DoubleSoft.and.MutilListViewStudy;import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;import android.app.Activity;
import android.app.ListActivity;
import android.content.Context;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageButton;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;
public class MutilListViewStudy extends ListActivity {
    /** Called when the activity is first created. */
private List<Map<String, Object>> mData;
@Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //setContentView(R.layout.main);
        mData = getData();
        MyAdapter adapter = new MyAdapter(this);
        setListAdapter(adapter);
        
    }
private List<Map<String, Object>> getData() {
// TODO Auto-generated method stub
List<Map<String, Object>> list = new ArrayList<Map<String, Object>>(); Map<String, Object> map = new HashMap<String, Object>();
map.put("quanity", "数量1");
list.add(map);

map = new HashMap<String, Object>();
map.put("quanity", "数量2");

list.add(map);

return list; }

public  class ViewHolder{
public TextView tableNo;
public ImageButton btnMinish;
public EditText etQuanity;
public ImageButton btnIncrease;

}

public class MyAdapter extends BaseAdapter { private LayoutInflater mInflater;
int index;
View vv;
public MyAdapter(Context context){
this.mInflater = LayoutInflater.from(context);
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return mData.size();
} @Override
public Object getItem(int arg0) {
// TODO Auto-generated method stub
return null;
} @Override
public long getItemId(int arg0) {
// TODO Auto-generated method stub
return 0;
} @Override
public View getView(int position, View convertView, ViewGroup parent) {

ViewHolder holder = null;

if (convertView == null) {

holder=new ViewHolder();  
index=position;
vv=convertView;
convertView = mInflater.inflate(R.layout.main, null);
holder.tableNo = (TextView)convertView.findViewById(R.id.tableno);
holder.btnMinish=(ImageButton)convertView.findViewById(com.DoubleSoft.and.MutilListViewStudy.R.id.imgbtn01);
holder.etQuanity=(EditText)convertView.findViewById(com.DoubleSoft.and.MutilListViewStudy.R.id.et01);
holder.btnIncrease=(ImageButton)convertView.findViewById(com.DoubleSoft.and.MutilListViewStudy.R.id.imgbtn02);
convertView.setTag(holder);


}else {

holder = (ViewHolder)convertView.getTag();
}

holder.tableNo.setText((String)mData.get(position).get("quanity"));

holder.btnIncrease.setOnClickListener(new View.OnClickListener() {

@Override
public void onClick(View v) {
// TODO Auto-generated method stub
//如何取得对应EditText并修改其傎
}
});

holder.btnMinish.setOnClickListener(new View.OnClickListener() {

@Override
public void onClick(View v) {
// TODO Auto-generated method stub
//如何取得对应EditText并修改其傎

}
});


return convertView;
}
}


}
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="horizontal"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
<TextView 
    android:id="@+id/tableno"
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="@string/hello"
    />
<ImageButton
android:id="@+id/imgbtn01"
    android:layout_width="50dip" 
    android:layout_height="50dip" 
    android:scaleType="centerInside"
android:src="@drawable/minish"
    
/>
<EditText
android:id="@+id/et01"
android:layout_width="100dip" 
    android:layout_height="50dip" 
    android:text="0"
    android:textSize="25px"
/>
<ImageButton
android:id="@+id/imgbtn02"
    android:layout_width="50dip" 
    android:layout_height="50dip" 
    android:scaleType="centerInside"
android:src="@drawable/increase"
    
/></LinearLayout>

解决方案 »

  1.   

    兄弟,看到ViewHolder类了吧,关键就是它。注意public EditText etQuanity;。
    然后看public View getView(int position, View convertView, ViewGroup parent) 中的
    holder.etQuanity=(EditText)convertView.findViewById(com.DoubleSoft.and.MutilListViewStudy.R.id.et01);
    你要的EditText就是它了。
    <EditText
        android:id="@+id/et01"
        android:layout_width="100dip" 
        android:layout_height="50dip" 
        android:text="0"
        android:textSize="25px"
    />
      

  2.   


    这个我倒是知道但是

     holder.btnIncrease.setOnClickListener(new View.OnClickListener() {
                    
                    @Override
                    public void onClick(View v) {
                        // TODO Auto-generated method stub
                        //如何取得对应EditText并修改其傎
                    }
                });
    中我不能用holder.etQuanity.setText()
      

  3.   

    搞定了,还是要变通
    我ViewHolder写成这样,就不用再去取了。public  class ViewHolder{
    public TextView tableNo;
    public ImageButton btnMinish;
    public EditText etQuanity;
    public ImageButton btnIncrease;
    public ViewHolder(TextView _tableNo,ImageButton _btnMinish,EditText _etQuanity,ImageButton _btnIncrease)
    {
    tableNo=_tableNo;
    btnMinish=_btnMinish;
    etQuanity=_etQuanity;
    btnIncrease=_btnIncrease;
    btnMinish.setOnClickListener(new OnClickListener(){ @Override
    public void onClick(View v) {
    // TODO Auto-generated method stub
    etQuanity.setText("13");
    }});
    }谢谢3楼兄弟的提醒
      

  4.   

    哦,你是想设置值啊,不能那样的,
    看如下例子:List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();        Map<String, Object> map = new HashMap<String, Object>();
            map.put("etQuanity", "12");
            list.add(map);
           mData.set(6, map);
    adapter.notifyDataSetChanged();
    是这样更新的~~lz试试吧
      

  5.   


            Map<String, Object> map = new HashMap<String, Object>();
            map.put("etQuanity", "12");
            list.add(map);
           mData.set(6, map);
           adapter.notifyDataSetChanged();
    注意把adapter变成局部变量
      

  6.   


    如果只是为了附值,就比较好办,
    我是要在按BUTTON时改变它的值