0

我有一個使用POJO類填充的ArrayAdapter。該列表視圖包含2個佈局。 1是用於菜單項目,另一個用於類別。列表視圖與分隔符很好。ListView中使用ArrayAdapter的按鈕

後來我試着在每個menuitem行中添加一個按鈕來編輯它中的細節。在這裏,當我嘗試獲取按鈕被點擊的行的位置時,我遇到了一個問題。

我試圖顯示使用日誌的位置。 1.如果行數較少並且不需要滾動。日誌顯示正確的位置。 2.如果我有更多的行進入頁面,那麼我的日誌中的位置不正確。

您能否引導我到我的代碼需要更正的行?提前

public class ConfirmAdapter extends ArrayAdapter<POJO_ConfirmMenu> { 
    private ArrayList<POJO_ConfirmMenu> ticketItem; 
    Context context; 
    LayoutInflater vi; 
    public ConfirmAdapter(Context context ,ArrayList<POJO_ConfirmMenu> menu) {  
     super(context, 0, menu); 
     this.ticketItem = new ArrayList<POJO_ConfirmMenu>();  
     this.ticketItem.addAll(menu); 
     this.context =context; 
     vi = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     }  
    private class ViewHolder { 
     TextView ticketItem; 
     TextView type; 
     TextView quantity; 
     Button cancel,edit; 
     } 
    public boolean isEnabled(int position) { 
     if (ticketItem.get(position).getItemType().equals("menucategory")) 
      return false; 
      return true; 
    } 
    public int getItemViewType(int position) { 
     if (ticketItem.get(position).getItemType().equals("menucategory")) 
      return 0; 
      return 1; 
    } 
    public int getViewTypeCount() { 
     return 2; 
    } 
    public View getView(final int position, View convertView, ViewGroup parent) {  
     ViewHolder holder; 
     int type = getItemViewType(position); 
     if (convertView == null) { 
      holder = new ViewHolder(); 
      switch (type) { 
      case 0: 
       convertView = vi.inflate(R.layout.group, null); 
       holder.ticketItem = (TextView) convertView.findViewById(R.id.tvGroup); 
       convertView.setBackgroundColor(Color.RED); 
       break;    
      case 1: 
       convertView = vi.inflate(R.layout.confirmitem, null); 
       holder.ticketItem = (TextView) convertView.findViewById(R.id.tvConfirmItem); 
       holder.quantity = (TextView) convertView.findViewById(R.id.tvQuantity); 
       holder.cancel = (Button) convertView.findViewById(R.id.bCancel); 
       holder.edit  = (Button) convertView.findViewById(R.id.bEdit); 
           holder.edit.setTag(position); 
       // Edit button 
       holder.edit.setOnClickListener(new View.OnClickListener() { 
        public void onClick(View v) { 
         int pos = (Integer) v.getTag(); 

         Log.i("ConfirmAdapter ","Order  Edit @ position : " + pos); 
         }  
       }); 
       break; 
      }    convertView.setTag(holder); 
     } else { 
      holder = (ViewHolder) convertView.getTag(); 
     }  
     switch (type) { 
     case 0:   
      holder.ticketItem.setText(ticketItem.get(position).getTicketItemObject().getCategoryName()) ; 
      convertView.setBackgroundColor(Color.RED); 
      break;    
     case 1: 
      holder.ticketItem.setText(ticketItem.get(position).getTicketItemObject().getName()); 
      holder.quantity.setText(Integer.toString(ticketItem.get(position).getTicketItemObject().getItemCount())); 
      break; 
     } 
     return convertView; 
     } 
} 
感謝

}

回答

4

getView()方法你必須標記設置爲你的按鈕,當你點擊鏈接獲得整數內的標籤,它會回報你的點擊按鈕的正確位置,像下面的東西。

else { 
     holder = (ViewHolder) convertView.getTag(); 
} 
holder.edit.setTag(position); //to get the orignal position later in onClick() of button 
holder.edit.setOnClickListener(new View.OnClickListener() { 
      public void onClick(View v) { 
       int pos = (Integer) v.getTag(); //the real and updated position 
      Log.i("ConfirmAdapter ","Order Edit @ position : " + pos); 
      }  
}); 

更新

注:獲得轉換視角標籤後,設置標記您的按鈕和手柄單擊甚至過。

What is the main purpose of setTag() getTag() methods of View?

+0

好的,羅賓先生。 –

+0

羅賓。我使用Set和getTag,但仍然出現錯誤的位置。我已經更新了 – user1822729

+0

這個問題中的代碼,它的工作原理是,檢查它的編輯按鈕或取消按鈕。 – RobinHood

相關問題