我已经阅读了this和this之类的一些SO问题,但仍然无法弄清楚我的代码有什么问题。我有一个ListFragment
,每一行都有一个TextView
和一个CheckBox
。单击CheckBox
是有效的,但是单击TextView
则没有任何作用,也不会调用OnListItemClick
。我还尝试过动态添加OnClickListener
,以使其正常工作,但这不是正确的方法,并且它也缺少点击的GUI反馈(一秒钟被“突出显示”)。 >
这是我用于每个项目的textview_with_checkbox.XML:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="wrap_content" android:clickable="true" android:focusable="true" android:gravity="left" android:descendantFocusability="blocksDescendants" android:orientation="horizontal" > <TextView android:id="@+id/textview_event_name" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:paddingLeft="3dp" android:paddingTop="5dp" android:focusable="true" android:singleLine="false" /> <CheckBox android:id="@+id/checkbox_for_event_name" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="0.05" android:focusable="false" android:clickable="false" /> </LinearLayout>
现在的代码:
选择要删除的“文件”@Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); displayEventsLogFiles(); } @Override public void onListItemClick(ListView l, View v, int position, long id) { super.onListItemClick(l, v, position, id); String chosenItem = (String) getListAdapter().getItem(position); mCallBack.onEventItemSelected(chosenItem); } static class myCustomAdapterViewHolder { public TextView eventName; public CheckBox eventCheckBox; } private class myCustomAdapter extends ArrayAdapter<String> { private ArrayList<String> sortedList; private Context m_oContext; List<String> m_oValues = null; public myCustomAdapter(Context cont, int viewResId, List<String> objects) { super(cont, viewResId, objects); m_oContext = cont; m_oValues = objects; sortedList = new ArrayList<String>(); for (String str : objects) sortedList.add(str); java.util.Collections.sort(sortedList); } @Override public View getView(int position, View convertView, ViewGroup parent) { View l_oRowView = convertView; myCustomAdapterViewHolder l_oInitializedViewHolder = null; final int l_nPosition = position; // Use convertView if possible, otherwise inflate a view: if (l_oRowView == null) { LayoutInflater inflater = (LayoutInflater) m_oContext .getSystemService(Context.LAYOUT_INFLATER_SERVICE); l_oRowView = inflater.inflate(R.layout.textview_with_checkbox, parent, false); // PlaceHolder pattern: final myCustomAdapterViewHolder l_oViewHolder = new myCustomAdapterViewHolder(); l_oViewHolder.eventName = (TextView) l_oRowView.findViewById(R.id.textview_event_name); l_oViewHolder.eventCheckBox = (CheckBox) l_oRowView.findViewById(R.id.checkbox_for_event_name); l_oViewHolder.eventCheckBox.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { CheckBox cb = (CheckBox)v; //cb.setChecked(!cb.isChecked()); String l_sFilename = l_oViewHolder.eventName.getText().toString(); if (cb.isChecked()) { if (!m_lstSelectedFilenames.contains(l_sFilename)) m_lstSelectedFilenames.add(l_sFilename); } else { if (m_lstSelectedFilenames.contains(l_sFilename)) m_lstSelectedFilenames.remove(l_sFilename); } } }); l_oViewHolder.eventCheckBox.setFocusable(false); //l_oViewHolder.eventCheckBox.setClickable(false); // "Add" the viewHolder as a tag: l_oRowView.setTag(l_oViewHolder); l_oInitializedViewHolder = l_oViewHolder; } else l_oInitializedViewHolder = (myCustomAdapterViewHolder) l_oRowView.getTag(); // By now, the rowView is initialized, just get the viewHolder and then get the views from it, to update: //myCustomAdapterViewHolder l_oViewHolder = (myCustomAdapterViewHolder) l_oRowView.getTag(); /*l_oInitializedViewHolder.eventName.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { mCallBack.onEventItemSelected((String)getListAdapter().getItem(l_nPosition)); } });*/ l_oInitializedViewHolder.eventName.setText(m_oValues.get(position)); return l_oRowView; //return super.getView(); } public myCustomAdapter(Context cont, int viewResId, String[] strings) { this(cont, viewResId, Arrays.asList(strings)); } @Override public String getItem(int position) { return sortedList.get(position); } @Override public int getPosition(String item) { return sortedList.indexOf(item); } }
我在这里做错了什么?我想要的是能够使用
CheckBox
es
我已经读过类似这样的一些问题,但是仍然无法弄清楚我的代码有什么问题。我有一个ListFragment,并且每一行都有一个TextView和一个CheckBox。单击复选框是...
[仅尝试将onclick用于textview和checkbox,而不是onListItemClick-也可以将其删除-,因此也应更改线性布局的某些属性。
添加以下属性: