-1

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>

誰かが私を助けてくれることを願っています!

前もって感謝します !

4

2 に答える 2

0

setItemChecked()手動で呼び出す必要はありません。

ListView(以前)をセットアップするだけです

contacts.setChoiceMode(CHOICE_MODE_MULTIPLE_MODAL);
contacts.setMultiChoiceModeListener(new MultiChoiceModeListener() { ... });

また、項目を長押しすると、自動的にチェックされます (onCreateActionMode()選択モード リスナーに対して呼び出されます)。

于 2014-06-06T22:23:14.203 に答える