public class Totaldata_button extends ListActivity {
public ViewHolder holder = null;
private List<Map<String, Object>> mData;

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Bundle BundelForGetTotaldata = this.getIntent().getExtras();
String total_data = BundelForGetTotaldata.getString("Total_data");
mData = getData(total_data);
MyAdapter adapter = new MyAdapter(this);
setListAdapter(adapter);
}
//生成动态数组,加进数据
private List<Map<String, Object>> getData(String page) {
List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
String[] pagedata =null;
pagedata = page.split("&");
for(int i=0;i<pagedata.length;i++){
String[] shuju =null;
shuju = pagedata[i].split(";");
Map<String,Object> map =new HashMap();
            map.put("ItemTitle",shuju[1]);//标题
            map.put("ItemText", shuju[2]);//详细数据
            list.add(map);   
}
return list;
}

public final class ViewHolder{
public TextView title;
public TextView info;
public Button viewBtn;
}

//重写Adapter以添加按钮
public class MyAdapter extends BaseAdapter{ private LayoutInflater mInflater;


public MyAdapter(Context context){
this.mInflater = LayoutInflater.from(context);
} public int getCount() {
// TODO Auto-generated method stub
return mData.size();
}
public Object getItem(int arg0) {
// TODO Auto-generated method stub
return null;
}
public long getItemId(int arg0) {
// TODO Auto-generated method stub
return 0;
} public View getView(int position, View convertView, ViewGroup parent) {
if (convertView == null) {
holder=new ViewHolder();  
convertView = mInflater.inflate(R.layout.totaldata, null);
holder.title = (TextView)convertView.findViewById(R.id.title);
holder.info = (TextView)convertView.findViewById(R.id.info);
holder.viewBtn = (Button)convertView.findViewById(R.id.view_btn);
holder.viewBtn.setTag((String)mData.get(position).get("ItemTitle"));
convertView.setTag(holder);

}else {

holder = (ViewHolder)convertView.getTag();
}
holder.title.setText((String)mData.get(position).get("ItemTitle"));
holder.info.setText(Integer.toString(position));
holder.viewBtn.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
String title=(String)v.getTag();
new AlertDialog.Builder(Totaldata_button.this).setTitle("提示").setMessage(
title).setPositiveButton("确定",
                new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int whichButton) {
                    }
                }).show();
            }
});
return convertView;
}
}
}代码如上,从Itent中取出类似于"123;456&234;548&489;156"的字符串整理出listview输出;重写BaseAdapter以添加button;position因为要作为参数附带到button中,所以很重要。因为listview很多,所以可以滚动。发现一滚动position的排列就不是原来的了。
在button的onclick中有String title=(String)v.getTag();
因为holder.viewBtn.setTag((String)mData.get(position).get("ItemTitle"))中postition乱了;所有alert出来发现时乱78糟的。。请问有什么解决方法吗?使滚动后alert出来的仍然是原来的ItemTitle谢谢指导

解决方案 »

  1.   

    getItem, getItemId都要重写的
      

  2.   

    你这样的,我做过,好像是listview中可以装俩个以上的控件 ,而且要求是这些控件都能分别有自己的click事件,才会像你那样做。
    如果不是,我建议,不要写那样的代码。
    如果是,ViewHolder,这个类你不用定义,里面封装的也无非就是一个textview和一个button而已。你直接将
                if (convertView == null) {
                    holder=new ViewHolder();  
                    convertView = mInflater.inflate(R.layout.totaldata, null);
                    holder.title = (TextView)convertView.findViewById(R.id.title);
                    holder.info = (TextView)convertView.findViewById(R.id.info);
                    holder.viewBtn = (Button)convertView.findViewById(R.id.view_btn);
                    holder.viewBtn.setTag((String)mData.get(position).get("ItemTitle"));
                    convertView.setTag(holder);
                    
                }else {
                    
                    holder = (ViewHolder)convertView.getTag();
                }
    这段代码换下,new新的button和textview,也不用给它们设置flag什么的。后面的监听是一样的。
      

  3.   


    那你还是要理解一下把 你可看看官方例子ApiDemos 或者看看官源setting里面的那个manage application