ListViewにボタンを配置する前はTextViewだけで、リストアイテムのクリックで
取消線や文字色を制御していましたが
編集や削除のImageButtonを追加するとListViewのItemClickイベントが
走らなくなっちゃいました。
ということで、ListViewのItemClickイベントとImageButtonのClickイベント、
どちらも走るようにする方法についてです。
ListViewのアイテムクリックイベント
まずは、ListViewのアイテムをクリックした際の
イベントリスナーを設定するメソッドです。
private void setListViewListener() { mListView.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView parent, View view, int position, long id) { LinearLayout layout = (LinearLayout) view; TextView textViewDescription = (TextView) layout.findViewById(R.id.task_description); toggleTaskCompleteAt(position); Task task = (Task) mTaskAdapter.getItem(position); ControlUtility.changeItemState(textViewDescription, task.isCompleted()); } }); }
編集、削除クリックイベント
編集クリックイベントのソースです。
public void onClickTaskEdit(View v) { this.editPosition = (Integer)v.getTag(); this.showDialog(DIALOG_EDIT_TASK); }
削除クリックイベントのソースです。
public void onClickTaskDelete(View v) { int position= (Integer)v.getTag(); this.deleteTaskAt(position); }
ListViewのItemレイアウト
ListViewの一行一行のレイアウトです。
10行目の「android:descendantFocusability="blocksDescendants"」が
必要となります。
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="horizontal" android:paddingLeft="?android:attr/listPreferredItemPaddingLeft" android:paddingRight="?android:attr/listPreferredItemPaddingRight" android:minHeight="?android:attr/listPreferredItemHeightSmall" android:background="@color/list_item_color" android:descendantFocusability="blocksDescendants"> <TextView android:id="@+id/task_description" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_gravity="center_vertical" android:layout_weight="1" android:textAppearance="?android:attr/textAppearanceListItemSmall"/> <ImageButton android:id="@+id/button_edit" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_vertical" android:gravity="right" android:src="@android:drawable/ic_menu_edit" android:background="@color/list_item_button_color" android:onClick="onClickTaskEdit"/> <ImageButton android:id="@+id/button_delete" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_vertical" android:gravity="right" android:src="@android:drawable/ic_delete" android:background="@color/list_item_button_color" android:onClick="onClickTaskDelete"/> </LinearLayout>
本当はActivity.showDialog()も3.x系以降は非推奨となったので
DialogFragmentを使用したかったのですが、今回はそこまで手がまわりませんでした。
また時間を見つけて試したいと思います。
ではまた、いつの日か~。
0 件のコメント:
コメントを投稿