我有一个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)
。但是,当我导航回活动时,列表项不再可单击。
对此有一个很好的解决方法吗?
答案 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;
}
你应该真的很无聊,但使用跨活动回调总是很有趣。 :)