【问题标题】:How make android Gridview items clickable如何使android Gridview项目可点击
【发布时间】:2015-03-12 14:06:05
【问题描述】:

我有一个填充了gridview的片段,当我单击gridview项控件时,它将通过intent转移到另一个活动,问题是当我一次单击gridview多次时,它打开了许多活动那么我怎样才能让gridview项目只能点击一次

myGridview.setOnItemClickListener(new OnItemClickListener() {

        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

          //  Intent i=new Intent(CurrentActivity.this,NewActivity.class);
                         new MyAsync(getActivity(),position+1).execute();
        }
    });

我正在使用 Asynctask 代替那个 Intent,那里正在进行一些网络操作,然后在它的 postexecute 方法中我放置了这个 Intent

【问题讨论】:

  • 你能发布更多你的代码吗?这不应该发生......此外,拥有 isClicked 变量也没有意义,因为您总是在检查之前将其设置为 true。

标签: android gridview


【解决方案1】:

在点击方法内部不需要将onItemClickListener设置为null只需使用GridView.setClickable方法使GridView可点击或不可点击:

在Activity中声明ProgressDialog:

private ProgressDialog pDialog;

在开始下一个 Activity 之前显示进度条:

@Override
 public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
     myGridView.setClickable(false);     
     pDialog = new ProgressDialog(this);
     pDialog.setCancelable(false);
     pDialog.setCanceledOnTouchOutside(false);
     pDialog.setMessage("Loading...");
     pDialog.show();   
     new MyAsync(getActivity(),position+1).execute(); 
  }

onPostExecute 中再次设置 GridView 可点击并关闭 ProgressDialog:

@Override
        protected void onPostExecute(Integer result) {
            // TODO Auto-generated method stub
            super.onPostExecute(result);
            // start next activity here
            myGridView.setClickable(true); 
           if (pDialog != null)
            if (pDialog.isShowing())
                pDialog.dismiss();
       }

【讨论】:

  • @user3530829:你在开始MyAsync任务之前显示进度条吗?
  • @user3530829: 然后在开始任务前显示进度条
  • 但是当我们多次点击更快时,它再次打开多次@ρяσѕρєя K
  • 当我们在片段中多次导航时,进度条不会被解雇@ρяσѕρєя K
  • @user3530829:使用myGridView.setEnabled(false); 而不是myGridView.setClickable(false);
【解决方案2】:

你可以使用flag来控制可点击

  boolean flag = false;

    myGridview.setOnItemClickListener(new OnItemClickListener() {

            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                  if(flag == false){
                Intent i=new Intent(CurrentActivity.this,NewActivity.class);
                flag = true;
                }
            }
        });

【讨论】:

    【解决方案3】:

    您可以通过在每次单击 Gridview 项时获取单击时间和更新时间来做到这一点,这将使 gridview 项仅单击一次。

      private long mLastClickTime = 0;
    
      myGridview.setOnItemClickListener(new OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            if (SystemClock.elapsedRealtime() - mLastClickTime < 1000) {
                        return;
                }
                mLastClickTime = SystemClock.elapsedRealtime();
                Intent i=new Intent(CurrentActivity.this,NewActivity.class);
            }
        });
    

    希望对你有帮助!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-11-16
      • 1970-01-01
      • 2020-03-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多