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谢谢指导
如果不是,我建议,不要写那样的代码。
如果是,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什么的。后面的监听是一样的。
那你还是要理解一下把 你可看看官方例子ApiDemos 或者看看官源setting里面的那个manage application