【问题标题】:Android listview clicking on item multiple timesAndroid listview多次单击项目
【发布时间】:2015-01-16 09:24:48
【问题描述】:

我有一个包含多个项目的列表视图。单击一个项目时,将打开一个 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);
}

【问题讨论】:

  • 定义布尔 isClicked = false;并检查 if(!isClicked){isClicked = true; // 并开始你的活动}
  • 将启动模式设置为 android:launchMode="singleTask"

标签: android listview


【解决方案1】:

防止调用 ListView 项目的正确方法是(显然)禁用OnItemClickListener:

private void onNewsfeedClick(MyObject newsfeed) {
    listView.setOnItemClickListener(null);
    Intent intent = createIntent(newsfeed);
    startActivity(intent);
}

当此活动再次可见时,将侦听器重新设置为 onResume。

@Override
protected void onResume() {
    super.onResume();
    listView.setOnItemClickListener(newsfeedClickHandler);
}

【讨论】:

    【解决方案2】:

    维护一个布尔值isItemClicked 并在您返回列表视图时将其重置。

    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;
      }
    

    【讨论】:

      【解决方案3】:

      为防止多次单击 ListView 项,请在您的列表视图单击侦听器中添加以下代码:

      if (SystemClock.elapsedRealtime() - mLastClickTimeListViewItem < 1000){
          return;
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多