2

ボタンでリストを作成し、それらのボタンの押された状態をプログラムで制御しようとしています。

これらのボタンのセレクターを作成しました。

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@drawable/drw_blue_logincombination_pin_pressed" android:state_pressed="true"/>
    <item android:drawable="@drawable/drw_blue_logincombination_pin_normal" android:state_pressed="false"/>
</selector> 

そして、onTouch イベントを使用して setPressed(boolean) 関数で更新します。その部分はうまく機能します。

しかし、BaseAdapter では次のことを行います。

@Override
    public View getView(int position, View convertView, ViewGroup parent) {
        View ret = convertView;
        ViewHolder holder;

        if (ret == null) { // Inflate the view and set attributes
            ret = ViewHelper.inflateNewViewById(activity, R.layout.row_login_combination);
            holder = new ViewHolder();

            holder.delete = (ImageView) ret.findViewById(R.id.btnDelete);
            holder.pin = (ImageView) ret.findViewById(R.id.btnPin);

            holder.pin.setOnTouchListener(holder.listener);

            holder.delete.setOnClickListener(holder.deleteListener);

            ret.setTag(holder);
        } else {
            holder = (ViewHolder) ret.getTag();
        }

        CombinationHelper comb = combs.getCombination(position);

        holder.listener.setPosition(position);
        holder.deleteListener.setPosition(position);

        holder.pin.setPressed(comb.pin);

        return ret;

    }

アクティビティに入ると、comb.pin == true で、ボタンが押された状態に設定されますが、1 秒間だけ、押されていない状態に戻されます (onTouch リスナーを通過しません)。

しかし、2 番目の行を作成すると、最初の行が更新され、正しい状態 (押された状態) が表示されます。

基本的な間違いを犯しているのかもしれませんが、なぜ機能しないのかわかりません。誰か助けてもらえますか?

前もって感謝します。

編集: これは、アダプターの行レイアウトでボタンを宣言する方法です。

<ImageButton
            android:id="@+id/btnPin"
            android:layout_width="120dp"
            android:layout_height="match_parent"
            android:layout_margin="5dp"
            android:background="@drawable/button_pin"
            android:textAppearance="?android:attr/textAppearanceLarge" />
4

0 に答える 0