1

リストビューがあります。リストビューの各項目はカスタマイズされています。各アイテムには

テキストビュー1

テキストビュー2 ボタン1

テキストビュー1

テキストビュー2 ボタン1

テキストビュー1

テキストビュー2 ボタン1

項目ボタンをクリックすると、フォーカスが得られます。各リストビュー項目のレイアウト android:focusable="false" android:focusableInTouchMode="false" でボタンの次の属性を指定したにもかかわらず、ボタンのフォーカスを取得したくありません

4

4 に答える 4

0

数日前に私は同じ問題に直面しています。しかし今、私はそれを解決しました。

次のようにしてください。

以下のようにButtonを拡張するDontPressWithParentButtonという1つのクラスを作成します。

import android.content.Context;
import android.util.AttributeSet;
import android.view.View;
import android.widget.Button;

public class DontPressWithParentButton extends Button {

    public DontPressWithParentButton(Context context) {
        super(context);
    }

    public DontPressWithParentButton(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public DontPressWithParentButton(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
    }

    @Override
    public void setPressed(boolean pressed) {
        if (pressed && getParent() instanceof View && ((View) getParent()).isPressed()) {
            return;
        }
        super.setPressed(pressed);
    }

}

次に、アイテム行のxmlで、次のようにButtonを定義します(YOUR_APP_PACKAGEの代わりにパッケージを追加します)

<YOUR_APP_PACKAGE.DontPressWithParentButton android:id="@+id/deleteBtn" android:layout_width="100dp"
            android:layout_height="wrap_content" android:layout_alignParentRight="true"
            android:textColor="#FFFFFF"
            android:text="Approve"
            android:focusable="false"
            android:focusableInTouchMode="false"
            />

次に、以下のようにJavaファイルでIDを参照します。

DontPressWithParentButton deleteGameBtn=(DontPressWithParentButton) findViewById(R.id.deleteGameBtn);

次に、プロジェクトを実行します。あなたはあなたが望むものを手に入れるでしょう。

何か質問があればコメントしてください。

于 2012-10-11T09:52:13.207 に答える
0

android:descendantFocusability="blocksDescendants"子 View(row ) をブロックできるように追加します。

<ListView
        android:id="@+id/list"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:descendantFocusability="blocksDescendants" />

そして、あなたがitem.xmlに追加focusable and focusableInTouchMode to falseするよりもimageButton/Buttonバイスヴェルサが必要な場合

于 2015-01-14T21:28:07.267 に答える
0
public class DontPressWithParentButton extends Button {

public DontPressWithParentButton(Context context) {
    super(context);
}

public DontPressWithParentButton(Context context, AttributeSet attrs) {
    super(context, attrs);
}

public DontPressWithParentButton(Context context, AttributeSet attrs, int defStyle) {
    super(context, attrs, defStyle);
}

@Override
public void setPressed(boolean pressed) {
    if (pressed && getParent() instanceof View && ((View) getParent()).isPressed()) {
        return;
    }
    super.setPressed(pressed);
}
}

レイアウト ファイルに次の要素を追加します。

<DontPressWithParentButton />

これが欠陥なくうまく機能することを願っています

于 2012-07-06T05:49:17.140 に答える
0

これを試して:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
          android:orientation="vertical"
          android:focusable="false"
          android:layout_width="fill_parent"
          android:layout_height="wrap_content">

</LinearLayout>

レイアウト全体で Just Focuable false。

于 2012-07-05T06:55:54.507 に答える