7

現在、私はListView行を持っています。行の任意の領域をクリックすると、ListViewクリック イベントが発生します。

    if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.HONEYCOMB) {
        this.getListView().setChoiceMode(ListView.CHOICE_MODE_MULTIPLE_MODAL);
        this.getListView().setMultiChoiceModeListener(new ModeCallback());
        this.getListView().setOnItemClickListener(new ListViewOnItemClickListener());
    } else {
        // http://stackoverflow.com/questions/9754170/listview-selection-remains-persistent-after-exiting-choice-mode
        this.getListView().setOnItemLongClickListener(new ListViewOnItemLongClickListener());
        this.getListView().setOnItemClickListener(new ListViewOnItemClickListener());
    }

ここで、各行に小さなボタンを追加したいと思います。小さなボタンをクリックすると、元のクリック イベントとは異なるボタン クリック イベントが生成されますListView

ここに画像の説明を入力

私のArrayAdapter中で、私は持っていました

public View getView(int position, View convertView, ViewGroup parent) {
    View rowView = convertView;

    if (rowView == null) {
        LayoutInflater inflater = activity.getLayoutInflater();
        rowView = inflater.inflate(R.layout.watchlist_row_layout, null);
        ...
    }

    Button button = (Button)rowView.findViewById(R.id.button1);
    button.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            Utils.showLongToast("BUTTON CLICK");
        }
    });

ここに画像の説明を入力

ボタンをクリックすると、ボタン クリック イベントが生成されます。ただし、ボタン以外の領域をクリックしても、ListViewクリック イベントは発生しません。

なぜそうなのか、私は知っていますか?これを解決する方法はありますか?

4

2 に答える 2

14

Rows と Buttons の両方をクリック可能にしたい場合は、設定します

android:focusable="false"

あなたのButtonのために。ImageButtons、RadioButtons などについても同様です。

Android は主に、多数の入力方法向けに設計されています。システム全体は、タッチスクリーンなしで完全に機能します。UI をナビゲートするために、ユーザーは、ビューがフォーカス可能である場合にのみ、ビューの後にビューをフォーカスする方向パッドを使用できます。デフォルトでは、すべての Android コントロールはフォーカス可能です。フォーカスが届かないコントロールを持たないようにするために、ListView は単純に項目ビューの選択 (およびクリック) を防ぎます。設計上、ListViewは少なくとも 1 つのフォーカス可能な子孫を含むitemview のクリックをブロックしますが、 setItemsCanFocus(true) を呼び出してコンテンツをフォーカス到達可能にすることはありません。

ここに全体の素晴らしい説明があります: ListView にいくつかのクリック可能な領域がある

于 2013-09-19T20:21:50.117 に答える