[英]when we scroll listview, runtime added button change position in android
这是我的listadapter类
public class ListDemoAdapter extends BaseAdapter{
private String[] name={"aa","bb","cc","dd","ee","ff","gg","hh","ii","jj","kk"};
private Context context;
private LayoutInflater inflater;
public ListDemoAdapter(Context ctx) {
context=ctx;
inflater=(LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return name.length;
}
@Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return name[position];
}
@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
View view=convertView;
ViewHolder holder;
if(view==null)
{
holder=new ViewHolder();
view=inflater.inflate( R.layout.listitem, null);
holder.tv=(TextView)view.findViewById(R.id.tv);
holder.btn=(Button)view.findViewById(R.id.addbtn);
holder.rl=(LinearLayout)view.findViewById(R.id.runtimerl);
view.setTag(holder);
}else{
holder=(ViewHolder) view.getTag();
}
holder.tv.setText(name[position]);
holder.btn.setOnClickListener((OnClickListener) context);
return view;
}
private class ViewHolder{
private TextView tv;
private Button btn;
private LinearLayout rl;
}
}
当我们单击按钮时,将生成运行时按钮,但是当我们滚动列表视图时,将在另一行代码中更改运行时创建的按钮,如下所示:
public class AndroidListDemoActivity extends Activity implements OnClickListener{
private ListView list;
public static int pos=0;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
list=(ListView)findViewById(R.id.list);
list.setAdapter(new ListDemoAdapter(this));
}
@Override
public void onClick(View v) {
if(v.getId()==R.id.addbtn){
View view=(View) v.getParent();
LinearLayout rl=(LinearLayout)view.findViewById(R.id.runtimerl);
Button btn=new Button(this);
btn.setText(""+pos);
btn.setTag(btn+"pos");
rl.addView(btn);
pos++;
}
}
}
在适配器上滚动时, getView
不能保证位置。 每次您滚动浏览已使用适配器初始化的列表时,都会初始化新视图。
因此,您要做的就是使用getView
方法。
convertView
实例上获取onClickListener
。 getView
方法的位置 ,显然是在convertView
的onClickListener
的onClick
方法内部。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.