2016-09-13 90 views
0

我試圖使用我的ArrayAdapter中的按鈕刪除顯示在我的ListView中的項目。我在ArrayAdapter中看到getPosition方法返回項目的索引號,但我不知道在ArrayAdapter的remove方法中使用它。我怎樣才能做到這一點?需要幫助。如何使用arrayadapter中的按鈕刪除列表視圖中的項目

arrayAdapter

public class myOrderAdapter extends ArrayAdapter<myOrder> { 


ArrayList<myOrder> list; 

    public class ViewHolder{ 
     TextView tableNum; 
     TextView itemName; 
     TextView itemQuantity; 
     TextView custName; 
     Button btnStatus; 
    } 

    public myOrderAdapter(Context context, ArrayList<myOrder> orderList) { 
     super(context, 0,orderList); 
     this.list = orderList; 
    } 

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

      final myOrder orderList = getItem(position); 

      ViewHolder viewHolder; 
      viewHolder = new ViewHolder(); 
      if(convertView == null){ 


       convertView = LayoutInflater.from(getContext()).inflate(R.layout.item_layout,parent,false); 

       viewHolder.tableNum = (TextView)convertView.findViewById(R.id.tableNum); 
       viewHolder.itemName = (TextView)convertView.findViewById(R.id.itemName); 
       viewHolder.custName = (TextView)convertView.findViewById(R.id.custName); 
       viewHolder.itemQuantity = (TextView)convertView.findViewById(R.id.itemQuantity); 
       viewHolder.btnStatus = (Button)convertView.findViewById(R.id.statusButton); 

       convertView.setTag(viewHolder); 
      } 

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


      viewHolder.tableNum.setText("Order for Table: "+orderList.getTable_id()); 
      viewHolder.itemName.setText(orderList.getItem_name()); 
      viewHolder.custName.setText("Customer Name: " + orderList.getCust_name()); 
      viewHolder.itemQuantity.setText("QTY: " + orderList.getQuantity()); 


      if(orderList.getStatus_id() == 1){ 
       viewHolder.btnStatus.setText("Ready"); 
       viewHolder.btnStatus.setOnClickListener(new View.OnClickListener() { 
        @Override 
        public void onClick(View view) { 
         Toast.makeText(getContext(),"" + getPosition(orderList),Toast.LENGTH_SHORT).show(); 
           // Remove item codes here.. 
           list.remove(position); 

        } 
       }); 
       notifyDataSetChanged(); 
      } 

      return convertView; 
     } 
+1

從orderList刪除的項和晚期調用'notifyDataSetChanged()' – Raghunandan

+0

20秒。 @Raghunandan說 –

+0

你能提供一些示例代碼嗎?我嘗試使用代碼remove(getPosition(orderList))的arrayadapter的remove方法,但它變成紅色,並說創建一個方法刪除參數的int。 – newBieUser0829

回答

0

ArrayAdapter也有一個方法Remove(T對象),它可以從該列表中刪除該項目,也可以從該ArrayList移除。所有的 首先得到訂單在getView

final myOrder order = getItem(position); 

orderList是您在構造函數傳入ArrayList中。

viewHolder.btnStatus.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View view) { 
     //Your Toast message 

     orderList.remove(position); 
    } 
}); 

notifyDataSetChanged(); 
+0

我試過了你說的,它的工作原理,但是當我嘗試從最上面移除該項目時,它並沒有移除它,但是移除了下面的一個隨機項目。 – newBieUser0829

+1

@ newBieUser0829您正在設置按鈕文本,並且只在狀態ID爲1時單擊偵聽器。如果不是1,則不會在按鈕上設置任何內容,這可能會導致與視圖回收有關的一些問題。你可以先刪除這個條件並嘗試刪除部分。 –

+1

我所做的是我在getview之外創建了一個新的公共Integer變量,並將該位置的值轉換爲該值,我試過了幾次,並且發現位置的值不一致,而值新的整數是一致的,所以我嘗試使用新的整數,並以某種方式得到我想要的結果。 – newBieUser0829

0
viewHolder.btnStatus.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       Toast.makeText(view.getContext(),"" + getPosition(orderList),Toast.LENGTH_SHORT).show(); 
         list.remove(position); //List/ArrayList of order in your program. 

      } 
     }); 
     notifyDataSetChanged(); 
+2

而不是「getContext()」,您應該從「view」獲取上下文並用於烤麪包。所以你會避免泄漏。 – deadfish

+0

orderList已經具有getItem(position)的值,當我再次使用orderList時,下一行代碼是來自myOrder類的getter/setter。 – newBieUser0829

+0

您在適配器類中使用的arraylist是什麼?您需要從該 –

相關問題