2013-02-23 3 views
1

에서 런타임 추가 버튼의 변경 위치를 스크롤 할 때이 내 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++; 
     } 
    } 
} 
+0

코드를 읽을 수 있도록 만들어주세요. – Riskhan

답변

0

getView : 다른 행 코드는 아래와 같습니다. 새 뷰는 어댑터로 초기화 된 목록을 스크롤 할 때마다 초기화됩니다.

그럼,해야할 일은 getView 방법으로 게임하는 것입니다.

  • convertView 인스턴스에서 onClickListener을 가져 오십시오.
  • getView 메소드가 아닌 Adapter 클래스 내부의 정적 변수를 초기화하십시오.
  • 이제 convertViewonClickListeneronClick 방법 안에 분명히 어댑터의 getView 방법의 정적 변수위치을 지정합니다.
  • 같은 장소에서 버튼을 볼 수 있습니다.