如何处理ListView中的快速顺序点击

时间:2012-11-09 14:50:44

标签: android android-listview onclicklistener

我有一个ListView项目,可以点击进行导航。

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

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

不幸的是,这导致TestActivity启动的次数与用户在int loading之间点击int的次数相同。我尝试使用null将点击操作设置为setOnClickListener(null)。但是,当我导航回活动时,列表项不再可单击。

对此有一个很好的解决方法吗?

1 个答案:

答案 0 :(得分: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;
}

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