1

ListViewクリックするとナビゲートするアイテムがあります 。

リストアイテムには2つのテキストビューがあり、次のクリックハンドラーがあります。

private OnClickListener playClickListener() {
        return new OnClickListener() { 
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(getActivity(), TestActivity.class);
                startActivity(intent);
             } 
        };
    }

残念ながら、これにより、ユーザーがintの読み込みの間にクリックした回数だけTestActivityが起動します。クリックハンドラーをnullで設定してみましたsetOnClickListener(null)。ただし、アクティビティに戻ると、リストアイテムをクリックできなくなります。

これに対する良い回避策はありますか?

4

1 に答える 1

2

試して使用することができますstartActivityForResult()

private static final int REQUEST_CODE_MAKE_CLICKABLE = 1;

private boolean mAlreadyClicked = false;
private OnClickListener playClickListener() {
    return new OnClickListener() { 
        @Override
        public void onClick(View v) {
            if(mAlreadyClicked) return;
            mAlreadyClicked = true;
            Intent intent = new Intent(getActivity(), TestActivity.class);
            startActivityForResult(intent, REQUEST_CODE_MAKE_CLICKABLE );
         } 
    };
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if(requestCode == REQUEST_CODE_MAKE_CLICKABLE && resultCode == Activity.RESULT_OK) {
        mAlreadyClicked = false;
    } 
}   

TestActivityでは、finishをオーバーライドして次のことを行うことができます。

@Override
public void finish() {  
    setResult(Activity.RESULT_OK, new Intent());
    super.finish();
}

これにより、次のアクティビティが戻ってクリック機能が「再度有効になる」まで、クリックが1回だけ発生します。

- また -

退屈でブール値を維持し、onResume()で単に「リセット」することができます。

private boolean mAlreadyClicked = false;
private OnClickListener playClickListener() {
    return new OnClickListener() { 
        @Override
        public void onClick(View v) {
            if(mAlreadyClicked) return;
            mAlreadyClicked = true;
            Intent intent = new Intent(getActivity(), TestActivity.class);
            startActivity(intent, REQUEST_CODE_MAKE_CLICKABLE );
        } 
    };
}

@Override
public void onResume() {
    super.onResume();
    mAlreadyClicked = false;
}

あなたは本当に退屈なはずですが、クロスアクティビティコールバックを使用することは常に楽しいです。:)

于 2012-11-09T15:01:37.137 に答える