2012-11-09 38 views
1

我有一个ListView,其中的项目将通过点击进行导航。如何处理ListView中的快速顺序点击

列表项有两个文本的意见,其中有以下单击处理:

private OnClickListener playClickListener() { 
     return new OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       Intent intent = new Intent(getActivity(), TestActivity.class); 
       startActivity(intent); 
      } 
     }; 
    } 

不幸的是这会导致测试活动发射了多次,用户点击intbetween INT加载。我尝试将null设置为setOnClickListener(null)。但是,当我导航回活动时,列表项不再是可点击的。

有没有一个很好的解决这个问题?

回答

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

,并在您的测试活动,您可以覆盖完成,以做到以下几点:

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

真的应该是枯燥的,但使用交叉Activity回调总是很有趣。 :)

+0

谢谢!我为无聊的方式去了 - 希望有更优雅的东西。工作正常 - 这是主要的事情! – serenskye