ListView
アクションモードを使用して、ユーザーが1回のアクションで複数の行を削除できるように、Androidアプリケーションで複数のアイテム選択をAndroidアプリケーションに実装しようとしています。
たとえば、長いクリックをリッスンする最初の項目を確認します (次の例でcontacts
は、 a ListView
) :
@override
public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id)
{
contacts.setChoiceMode(AbsListView.CHOICE_MODE_MULTIPLE);
contacts.setItemChecked(position, true);
return true;
}
setItemChecked()
問題は、メソッドを呼び出した後、getCheckedItemPositions()
メソッドは戻りnull
ますが、メソッドにチェックインされたアイテムの位置を返す必要がありますonItemLongClick()
か?
私のアイテムはListView
カスタムビューで作られています。そのため、カスタムビューがCheckable
インターフェイスを実装する必要があることをインターネット全体で読みました。だからここに私のカスタムビューのメインコンテナ:
public final class CheckableLinearLayout
extends LinearLayout
implements Checkable
{
private boolean checked;
public CheckableLinearLayout(Context context, AttributeSet attrs)
{
super(context, attrs);
}
@Override
public boolean isChecked()
{
return checked;
}
@Override
public void setChecked(boolean checked)
{
this.checked = checked;
}
@Override
public void toggle()
{
checked = !checked;
}
}
そしてここにアイテムのレイアウト:
<?xml version="1.0" encoding="utf-8"?>
<com.package.CheckableLinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="10dip"
android:background="@drawable/bg_contact"
>
<ImageView
android:id="@+id/contactPhoto"
android:layout_width="75dip"
android:layout_height="75dip"
/>
<TextView
android:id="@+id/contactName"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="20dip"
android:layout_gravity="center_vertical"
android:textColor="@color/black"
/>
</com.package.CheckableLinearLayout>
誰かが私を助けてくれることを願っています!
前もって感謝します !