2012-07-09 136 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