2012-07-09 176 views
3

可能重複:
Handling button event in each row of Listview issue列表視圖與按鈕

我工作的一個Android應用程序。我應該在ListView的每一行中添加一個按鈕,當我點擊任何按鈕時,我需要刪除按鈕。但是,當我這樣做時,按鈕被刪除,但其他位置的其他一些按鈕也被刪除。此外,當我向下滾動ListView這些按鈕,我點擊並再次刪除出現在列表中。 你能告訴我一個確切的解決方案或完整的一段代碼嗎?謝謝...

public View getView(final int position, View convertView, ViewGroup parent) { 

     if(convertView == null){ 
      // LayoutInflater class is used to instantiate layout XML file into its corresponding View objects. 
      LayoutInflater layoutInflater = (LayoutInflater) getSystemService(LAYOUT_INFLATER_SERVICE); 
      convertView = layoutInflater.inflate(R.layout.listxml, null); 
     } 


     rawTextView = (TextView) convertView.findViewById(R.id.textView1); 
     rawTextView.setText("Text "+innerClassBookArray[position]); 

     final LinearLayout lnr=(LinearLayout)convertView.findViewById(R.id.layoutforbtn); 

     final Button btn = new Button(getBaseContext()); 
      btn.setText("MyButton"); 
      btn.setId(position); 
      lnr.addView(btn); 

      btn.setOnClickListener(myOnBtnClickListener); 

     return convertView; 
    } 
     private OnClickListener myOnBtnClickListener = new OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       final int posit = bookListView.getPositionForView((View) v.getParent()); 
       Toast.makeText(getApplicationContext(), Integer.toString(posit), Toast.LENGTH_LONG).show(); 

      } 
     }; 
+1

谷歌的ListView與Android按鈕。 – 2012-07-09 08:11:22

+0

使用持有者類並在其中聲明視圖。 – AkashG 2012-07-09 08:21:04

回答

1

Here是你的輕鬆和漂亮的教程。在此代碼當點擊事件試圖隱藏按鈕

Btn01.setOnClickListener(new OnClickListener(){ 

public void onClick(View v) { 

//Toast.makeText(SearchUser.this, "Button 1 "+listview_arr[position], Toast.LENGTH_SHORT).show(); 
Btn01.setvisibility(view.Gone); 
} 
}); 

嘗試這樣的。希望它對你有幫助。好運

+0

我已經嘗試過類似的東西。但其他一些按鈕也消失了,而且當我向下或向上滾動列表中的按鈕再次出現:( – Emilla 2012-07-09 08:39:25

+0

我相信如果你嘗試一個你肯定會得到你的結果。如果沒有按鈕後hideen調用list.notifyDataSetChanged() ;並且你還必須擴展listactivity – 2012-07-09 12:09:06

1

this例子可以幫助我解決這個問題:d

2

你可以不喜歡這樣做一個ArrayList中,每一個元素爲「0」(Arraylist<String> my=new ArrayList<String>();的ArrayList的大小應根據列表視圖列的大小)和按一下按鈕設置爲「1」 處於像my.set(position,"1");那樣的位置,然後通知列表視圖。也看看下面代碼中的條件是 例如

public View getView(final int position, View convertView, ViewGroup parent) { 

      if(convertView == null){ 
       // LayoutInflater class is used to instantiate layout XML file into its corresponding View objects. 
       LayoutInflater layoutInflater = (LayoutInflater) getSystemService(LAYOUT_INFLATER_SERVICE); 
       convertView = layoutInflater.inflate(R.layout.listxml, null); 
      } 


      rawTextView = (TextView) convertView.findViewById(R.id.textView1); 
      rawTextView.setText("Text "+innerClassBookArray[position]); 
    Button button =(Button)findViewById(R.id.yourid); 

     if(my.get(position).equals("1")){ 
    button.setVisiblity(View.INVISIBLE); 
    } 
      final LinearLayout lnr=(LinearLayout)convertView.findViewById(R.id.layoutforbtn); 


       btn.setOnClickListener(new OnClickListener() { 
       @Override 
       public void onClick(View v) { 

    my.set(position,"1"); 
    ((BaseAdapter)yourActivity.this.lv.getAdapter()).notifyDataSetChanged(); 
       } 
      }); 


      return convertView; 
     } 
I think this will definitely help you any question ask me  
+0

讓我看看代碼 – Nitin 2012-07-09 10:59:41

+0

只是copypaste我寫的代碼 – Nitin 2012-07-09 11:02:43

+0

Nitin非常感謝你..我解決了這個問題,真的是「((BaseAdapter)yourActivity.this.lv.getAdapter())。 notifyDataSetChanged();「幫助我非常感謝你:) – Emilla 2012-07-09 11:44:50