2012-11-09 40 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