2015-03-04 2 views
0

Это то, что я хочу достичь функции: В ListView стиль предмет можно использовать пользовательский файл макета XML. Когда я долго нажимаю на элемент списка, флажок VISIBLE и может реагировать на событие клика. enter image description hereAndroid ListView элемент Длинное нажатие не реагирует CheckBox событие

Но когда я нажимаю на список или флажок, у него нет ответа. Почему?

Это часть моего Список адаптер код:

@Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     // TODO Auto-generated method stub 
     View view = null; 
     final ViewHolder holder; 
     if (null != convertView && convertView instanceof LinearLayout) { 
      view = convertView; 
      holder = (ViewHolder) view.getTag(); 
     } else { 
      view = View.inflate(notifyFragment.getActivity(),R.layout.item_notify, null); 
      holder = new ViewHolder(); 

      holder.title = (TextView) view.findViewById(R.id.notify_title); 
      holder.timestamp = (TextView) view.findViewById(R.id.notify_timestamp); 
      holder.content = (TextView) view.findViewById(R.id.notify_content); 
      holder.cbox = (CheckBox)view.findViewById(R.id.notify_cbox); 
      holder.markFlag = (ImageView)view.findViewById(R.id.notify_markflag); 

      view.setTag(holder); 
     } 

     Item_Notify inform_item = notify_list.get(position); 

     holder.title.setText(inform_item.get_title()); 
     holder.timestamp.setText(inform_item.get_timestamp()); 
     holder.content.setText(inform_item.get_content()); 

     if (isShow) { 
      holder.cbox.setVisibility(View.VISIBLE); 
      Boolean flag = notifyFragment.recodeStatu.get(position); 
      if (flag == null) { 
       holder.cbox.setChecked(false); 
      } else { 
       holder.cbox.setChecked(flag); 
      } 
     } else { 
      holder.cbox.setVisibility(View.GONE); 
     } 

     return view; 
    } 

    static class ViewHolder { 
     TextView title; 
     TextView content; 
     TextView timestamp; 
     CheckBox cbox; 
     ImageView markFlag; 
    } 

Это Нажмите Event:

listView.setOnItemLongClickListener(new OnItemLongClickListener() { 
      public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) { 

       listAdapter.isShow = true; 
       listAdapter.notifyDataSetChanged(); 
       ll_notify_action.setVisibility(View.VISIBLE); 
       return true; 
      } 
     }); 

     listView.setOnItemClickListener(new OnItemClickListener() { 
      @Override 
      public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
       if (listAdapter.isShow) { 
        CheckBox cb = (CheckBox) view.findViewById(R.id.notify_cbox); 
        boolean isCheck = !cb.isChecked(); 
        if (isCheck) { 
         count++; 
        } else { 
         count--; 
        } 
        btn_del.setText("Delete(" + count + ")"); 
        recodeStatu.put(position, isCheck); 
        cb.setChecked(isCheck); 
       } else { 
        Toast.makeText(getActivity(), "click " + position, Toast.LENGTH_SHORT).show(); 
       } 

      } 
     }); 
+0

@Kelvin и нужно поставить флажок в GetView() метод, и от того, и нужно изменить в модели класса с булевыми. – PankajAndroid

+0

Я не уверен, правильно ли я это понял, но вам нужно подключить OnclickListener к вашей CheckBox (когда это видно) в классе ListAdapter. –

ответ

1

Если я понял правильно, я думаю, что вы забыли вставить в родительской компоновке флажка List Adapter:

android:descendantFocusability="blocksDescendants"> 

Нечто подобное (это случайный пример, так что вы должны следовать макету, я создал это только, чтобы вы смогли понять, где вы должны поставить эту информацию):

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:descendantFocusability="blocksDescendants"> 

<CheckBox 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content"/> 
</RelativeLayout> 
+0

Большое спасибо! –

+0

Без проблем, счастливое кодирование! –

0

Если я правильно помню, как ListViewItem имеет ClickEventListener любой встроенный В представлениях не будет таких событий, как щелчок.

+0

Как решить эту проблему? Можете ли вы дать мне совет? –

Смежные вопросы