Android 列表视图多次点击项目
Android listview clicking on item multiple times
我有一个包含多个项目的列表视图。单击项目时,将打开 Activity。但是,当我在该项目上快速单击几次时,与它相关的 activity 被打开了几次。如何只打开项目一次?
我使用以下代码:
private OnItemClickListener newsfeedClickHandler = new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
MyObject newsfeed = adapter.getItem(position);
onNewsfeedClick(newsfeed);
}
};
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_newsfeed, container, false);
...
listView = (ListView) view.findViewById(R.id.newsfeeds);
listView.setOnItemClickListener(newsfeedClickHandler);
listView.setAdapter(adapter);
...
return view;
}
private void onNewsfeedClick(MyObject newsfeed) {
Intent intent = createIntent(newsfeed);
startActivity(intent);
}
维护一个布尔值 isItemClicked
并在您 return 返回列表视图时重置它。
private boolean isItemClicked;
private OnItemClickListener newsfeedClickHandler = new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
if (!isItemClicked) {
isItemClicked = true;
MyObject newsfeed = adapter.getItem(position);
onNewsfeedClick(newsfeed);
}
}
};
private void resetIsItemClicked() {
isItemClicked = false;
}
防止调用 ListView 项的正确方法是(显然)禁用 OnItemClickListener
:
private void onNewsfeedClick(MyObject newsfeed) {
listView.setOnItemClickListener(null);
Intent intent = createIntent(newsfeed);
startActivity(intent);
}
当此 activity 再次可见时,在 onResume
重新设置侦听器。
@Override
protected void onResume() {
super.onResume();
listView.setOnItemClickListener(newsfeedClickHandler);
}
要防止多次点击 ListView 项,请在您的列表视图点击侦听器中添加以下代码:
if (SystemClock.elapsedRealtime() - mLastClickTimeListViewItem < 1000){
return;
}
我有一个包含多个项目的列表视图。单击项目时,将打开 Activity。但是,当我在该项目上快速单击几次时,与它相关的 activity 被打开了几次。如何只打开项目一次?
我使用以下代码:
private OnItemClickListener newsfeedClickHandler = new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
MyObject newsfeed = adapter.getItem(position);
onNewsfeedClick(newsfeed);
}
};
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_newsfeed, container, false);
...
listView = (ListView) view.findViewById(R.id.newsfeeds);
listView.setOnItemClickListener(newsfeedClickHandler);
listView.setAdapter(adapter);
...
return view;
}
private void onNewsfeedClick(MyObject newsfeed) {
Intent intent = createIntent(newsfeed);
startActivity(intent);
}
维护一个布尔值 isItemClicked
并在您 return 返回列表视图时重置它。
private boolean isItemClicked;
private OnItemClickListener newsfeedClickHandler = new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
if (!isItemClicked) {
isItemClicked = true;
MyObject newsfeed = adapter.getItem(position);
onNewsfeedClick(newsfeed);
}
}
};
private void resetIsItemClicked() {
isItemClicked = false;
}
防止调用 ListView 项的正确方法是(显然)禁用 OnItemClickListener
:
private void onNewsfeedClick(MyObject newsfeed) {
listView.setOnItemClickListener(null);
Intent intent = createIntent(newsfeed);
startActivity(intent);
}
当此 activity 再次可见时,在 onResume
重新设置侦听器。
@Override
protected void onResume() {
super.onResume();
listView.setOnItemClickListener(newsfeedClickHandler);
}
要防止多次点击 ListView 项,请在您的列表视图点击侦听器中添加以下代码:
if (SystemClock.elapsedRealtime() - mLastClickTimeListViewItem < 1000){
return;
}