2016-01-21 198 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