2016-06-21 11 views
1

私は、左側にimageviewを持つlistViewを持っています。私がしたいのは、 imageViewを押すと現在の行を選択し、もう一度押すと行を選択解除します。現在のコードでは、imageViewをクリックしたときにperformLongClick()で行を選択できますが、現在の行は選択されていません。ランダムであるようだ。事前リストビューで行を選択する方法ImageViewを押すだけです

+0

あなたがwouldn't onItemClickListenerを使用したくない理由はありますか? https://developer.android.com/reference/android/widget/AdapterView.OnItemClickListener.html –

+0

@ D.O。 POJOクラスの実装を使用してこれを解決できます。 – Nisarg

答えて

0

ListViewそれ自己clikcableと別の クリッカブル内部クリッカブルを使用して

public View getView(int position, View convertView, ViewGroup parent) { 
     final HmViewHolder holder; 
     row = convertView; 


     if (row == null) { 
      row = inflater.inflate(R.layout.list_item, parent, false); 
      holder = new HmViewHolder(); 
      holder.title = (TextView) row.findViewById(R.id.title); 
      holder.contact = (ImageView) row.findViewById(R.id.imageview); 

      row.setTag(holder); 
     } else { 
      holder = (HmViewHolder) row.getTag(); 
     } 

     holder.contact.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 

       if (multiMode) { 
        row.getTag(); 
        row.setSelected(!row.isSelected()); 
       holder.contact.setImageResource(R.drawable.ic_check_circle_black); 
       } else { 
        row.performLongClick(); 
        holder.contact.setImageResource(R.drawable.ic_contact); 
       } 
      } 
     }); 
    return row; 
    } 

おかげで良いではありません。したがって、 が好きなら、環境を混乱させ、 が正確に何をクリックするかを理解できないため、リストビュー内のアイテム (ImageViewとTextView)にclicklistenerを設定しない方がよいでしょう。したがって、onclickは listviewでのみ使用してください。

0

このトピックについてはChris Banes's blogpostです。

読んでみてください。あなたのトラブルはすべて解決されたと思います。私の意見では、チェックリストを作成するためのバスト方法です。

0

このような行レイアウトxmlでクリック可能にImageViewを設定します。

<ImageView 
    android:clickable="true"/> 
0
//ViewHolder Class 

    class ViewHolder { 
      TextView tv_details; 
      RelativeLayout rl_expense_list; 
      ImageView Iv_close; 
     } 

// `here is getView Method` 
public View getView(final int position, View convertView, ViewGroup parent) 
{   final ViewHolder viewHolder; 

      if (convertView == null) { 
       viewHolder = new ViewHolder(); 
       LayoutInflater inflater= (LayoutInflater) getApplicationContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
       convertView = inflater.inflate(R.layout.expenses_list_row, parent, false); 

       viewHolder.rl_expense_list = (RelativeLayout) convertView.findViewById(id.rl_expense_list); 
       viewHolder.tv_details = (TextView) convertView.findViewById(id.tv_details); 
       viewHolder.bt_close = (ImageView) convertView.findViewById(id.iv_close); 

       convertView.setTag(viewHolder); 
      } 
      else { 
       viewHolder = (ViewHolder) convertView.getTag(); 
      } 
      viewHolder.Iv_close.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View v) { 
        final AlertDialog alertDialog = new AlertDialog.Builder(ExpensesList.this).create(); 
        alertDialog.setTitle("Expense List"); 
        alertDialog.setMessage("Do You Want To Delete This Expense List?"); 
        alertDialog.setButton(DialogInterface.BUTTON_POSITIVE, "Yes", new DialogInterface.OnClickListener() { 
         @Override 
         public void onClick(DialogInterface dialog, int which) { 
          expensesDataModels.remove(position); 
          Customer_Feedback.expensesDataModels = expensesDataModels; 
          notifyDataSetChanged(); 
         } 
        }); 
        alertDialog.setButton(DialogInterface.BUTTON_NEGATIVE, "No", new DialogInterface.OnClickListener() { 
         @Override 
         public void onClick(DialogInterface dialog, int which) { 
          alertDialog.dismiss(); 
         } 
        }); 
        alertDialog.show(); 
       } 
      } 
+0

このコードは私のために働いています –

関連する問題