2016-01-21 150 views
1

我使用编辑文本框和按钮创建了自定义视图。我想通过点击一个按钮从列表视图中删除一个项目。 自定义视图代码:如何使用自定义视图中的按钮从列表视图中删除自定义视图

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" android:layout_height="match_parent"> 

    <Button 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="Delete" 
     android:id="@+id/delete_btn" 
     android:layout_alignParentTop="true" 
     android:layout_alignParentRight="true" 
     android:layout_alignParentEnd="true" /> 

    <EditText 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:id="@+id/player_name_txt" 
     android:textColor="#ffffff" 
     android:editable="false" 
     android:background="#5eb8ed" 
     android:layout_alignParentTop="true" 
     android:layout_alignParentLeft="true" 
     android:layout_alignParentStart="true" 
     android:layout_alignBottom="@+id/delete_btn" 
     android:layout_toLeftOf="@+id/delete_btn" 
     android:layout_toStartOf="@+id/delete_btn" /> 
    </RelativeLayout> 

该适配器和列表视图代码:

inflater = (LayoutInflater)this.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    playerListView = (ListView)this.findViewById(android.R.id.content).getRootView().findViewById(R.id.player_list); 
    playerListAdapter = new ArrayAdapter(this,R.layout.player_item,R.id.player_name_txt, new ArrayList<String>(){}); 
playerListView.setAdapter(playerListAdapter); 

代码中,我尝试:

public void removePlayer(View v) 
    { 
     EditText pairedEdit = (EditText)findViewById(R.id.player_name_txt); 
     String name = pairedEdit.getText().toString(); 
     playerListAdapter.remove(name); 
     playerListAdapter.notifyDataSetChanged(); 
    } 

现在它消除了第一项在列表视图中。

AlertDialog.Builder addPlayerBuilder = new AlertDialog.Builder(this); 
     final View customView = inflater.inflate(R.layout.add_player,null); 
     final EditText usernameEdit = (EditText)customView.findViewById(R.id.username_edit); 
     addPlayerBuilder.setView(customView); 
     addPlayerBuilder.setPositiveButton("Ok", new DialogInterface.OnClickListener() { 
      @Override 
      public void onClick(DialogInterface dialog, int id) { 

       String name = usernameEdit.getText().toString(); 
       playerListAdapter.add(name); 
       playerListAdapter.notifyDataSetChanged(); 

       dialog.dismiss(); 

      } 
     }); 
     addPlayerBuilder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() { 
      @Override 
      public void onClick(DialogInterface dialog, int id) { 
       dialog.cancel(); 
      } 
     }); 

     AlertDialog dialog = addPlayerBuilder.create(); 
     dialog.show(); 
+1

你需要它的位置删除所选项目 –

+0

你可以给这两个元素标签各自的resoure ID作为键和删除其他元素,当按钮被添加onclick属性或onclicklistener点击。将可见性设置为消失或不可见。 – Bob

回答

1

在您的自定义布局的地方按钮onclicklistener这会从ArrayList中通过删除元素删除()函数的位置的基础上,然后再调用notifyDataSetInvalidated()

+0

如何找到自定义视图的位置?因为所有的视图都会有相同的ID正确? – Bryant

+0

在你的适配器类中,你将使用一个函数View getView(int position,View convertView,ViewGroup parent),它的位置作为你应该使用的参数。 –

+0

我明白我需要删除该项目的位置,但我不知道如何获取按钮分开的自定义视图的实际位置。我如何去获得视图的位置? – Bryant

0

使用此:

Button b2 = (Button) row.findViewById(R.id.button1); 
     b2.setTag(arg0); 
     b2.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View arg0) { 
       int pos = (int)arg0.getTag(); 
        lista.remove(pos); 
        SunetePreferateAdaptor.this.notifyDataSetChanged();   } 
     }); 
+0

如何找到自定义视图的位置?因为所有的视图都会有相同的ID正确? – Bryant

+0

这里要删除的是从定制视图中删除该项目.. – 2016-01-22 03:49:50

+0

是的,但我如何找到自定义视图的位置被点击的按钮是分开的? – Bryant

0

在上delete_btn适配器类单击你要调用的方法去除:

public class yourAdapter extends BaseAdapter { 

    private static LayoutInflater inflater = null; 
    private Activity context; 
    private ArrayList<yourBean> arrList; 

    public yourAdapter(Activity context, 
      ArrayList<yourBean> arrList) { 
     this.context = context; 
     this.arrList = arrList; 
     inflater = (LayoutInflater) context 
       .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    } 

    public int getCount() { 
     return arrList.size(); 
    } 

    public Object getItem(int position) { 
     return position; 
    } 

    public long getItemId(int position) { 
     return position; 
    } 

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



     if (convertView == null) { 

      convertView = inflater.inflate(R.layout.list_row, 
        null); 


      viewHolder.delete_btn= (Button) convertView 
        .findViewById(R.id.delete_btn); 


      convertView.setTag(viewHolder); 

     } else { 
      viewHolder = (ViewHolder) convertView.getTag(); 
     } 

     viewHolder.delete_btn.setTag(position); 


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

        arrayList.remove(position); 
        notifyDataSetChanged(); 

     } 
    }); 

     return convertView; 
    } 

    static class ViewHolder { 
     Button delete_btn; 
    } 

} 
+0

如何找到自定义视图的位置?因为所有的视图都会有相同的ID正确? – Bryant

+0

你必须在你的适配器类的getview方法中使用上面的代码,例如:public'View getView(int position,View convertView,ViewGroup parent){}' – Bhumit

+0

请检查我编辑的答案.. – Bhumit