2013-02-23 30 views
1

运行时添加的按钮改变位置这是我listadapter类当我们滚动列表视图,在android系统

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++; 
     } 
    } 
} 
+0

请让问题中的代码是可读的 – Riskhan 2013-02-23 05:49:48

回答

0

getView不保证该位置,当您通过适配器滚动。每次滚动已使用适配器初始化的列表时,都会初始化新的视图。

所以,你需要做的是玩getView方法。

  • convertView实例上获取onClickListener
  • 初始化不在getView方法中但在Adapter类中的静态变量。
  • 现在很明显,分配convertViewonClickListeneronClick方法内部适配器的getView方法的静态变量位置
  • 在相同的地方可见您的按钮