繁体   English   中英

当我们滚动列表视图时,运行时在android中添加了按钮更改位置

[英]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方法中而是在Adapter类中初始化静态变量。
  • 现在,将静态变量位置分配给适配器的getView方法的位置 ,显然是在convertViewonClickListeneronClick方法内部。
  • 在同一位置显示您的按钮

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM