我有一个片段,其中填充了gridview,当我点击gridview项目控件将通过意图转移到另一个活动时问题是当我一次多次单击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();
}
});
取代那个Intent我正在使用Asynctask那里有一些网络操作然后在它的postexecute方法中我放置了意图
答案 0 :(得分:2)
在点击方法内部,无需将onItemClickListener
设置为null
,只需使用GridView.setClickable
方法即可使GridView可点击或无法点击:
在Activity中声明ProgressDialog:
private ProgressDialog pDialog;
在开始下一个活动之前显示进度条:
@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();
}
答案 1 :(得分:0)
您可以使用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;
}
}
});
答案 2 :(得分:0)
您可以通过每次点击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);
}
});
我希望它有所帮助!