0

ListView の項目をクリックすると、ショートカット メニューが表示されるように設定しました。

public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
    menu.setHeaderTitle("Pick an action");
    theView = v;
    TextView desc = (TextView) theView.findViewById(R.id.class_description);
    String description = (String) desc.getText();
    TextView id = (TextView) v.findViewById(R.id.class_id);
    Integer ID = Integer.valueOf(String.valueOf(id.getText()));
    menu.add(1, ID, 0, getString(R.string.add_to_calender));
    menu.add(2, ID, 0, getString(R.string.subscribe_alterations));
    assert description != null;
    if (!description.equals("")) {
        menu.add(3, ID, 0, getString(R.string.view_description));
    }
    menu.add(4, ID, 0, getString(R.string.view_alterations));
}

mListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
    @Override
    public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {

        Toast.makeText(getSherlockActivity(), "Clicked", Toast.LENGTH_SHORT).show();
        registerForContextMenu(view);
        view.setLongClickable(false);
        getSherlockActivity().openContextMenu(view);
     }
});

私のリストビューアダプターには、ボタンの可視性を切り替えるこの行があります

holder.alter.setVisibility(View.VISIBLE);
if ((position % 2) == 0) {
    holder.alter.setVisibility(View.INVISIBLE);
}

ボタンはこちら

<Button
    android:layout_width="20dp"
    android:layout_height="wrap_content"

    android:background="@drawable/alterations_btn"
    android:textColor="@color/white"
    android:layout_alignParentLeft="true"
    android:textAppearance="?android:attr/textAppearanceLarge"
    android:textStyle="bold"
    android:layout_marginRight="@dimen/padding_small"

    android:id="@+id/is_alt"
    android:layout_centerInParent="true"
    android:text="@string/exclamation_point"/>

ボタンが非表示の場合、コンテキスト メニューは機能しますが、表示されている場合は機能しません。

誰でも理由がわかりますか?

4

1 に答える 1

1

最初に覚えておくべきことは、ListView 要素にボタンやリンクなどの Clickable 要素がある場合は常に、それらがクリック イベントを制御するということです。そのため、ListView はクリック イベントを受け入れる機会がありません。

できることは、ListView にある Button の focusable 属性を false に設定し、それが役立つかどうかを確認することです。

于 2013-09-24T13:33:21.187 に答える