1

我有一个ListView可以在点击时导航的项目。

列表项有两个文本视图,它们具有以下单击处理程序:

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

不幸的是,这导致 TestActivity 触发的次数与用户在 int 加载之间单击的次数一样多。我尝试将点击处理程序设置为nullwith 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 中,您可以覆盖完成以执行以下操作:

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

这将导致点击只被触发一次,直到下一个活动返回并“重新启用”点击功能。

- 或者 -

您可能会很无聊并保持布尔值并在 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;
}

应该真的很无聊,但使用跨 Activity 回调总是很有趣。:)

于 2012-11-09T15:01:37.137 回答