我做了SO搜索,但並不真正知道要查找什麼。非常抱歉,如果這是一個愚蠢的問題。我剛剛接觸android編程,並試圖用listview製作可穿戴應用程序。當用戶點擊一個項目時,它應該顯示一個延遲的確認視圖,允許用戶取消選擇。我有一個有兩個視圖的活動,一個ListView和一個DelayedConfirmationView。ListView onItemClick和DelayedConfirmationView onTimerSelected觸發同樣的點擊
單擊列表項時,啓動計時器並顯示delayedConfirmationView。
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
mSelectedPosition = position;
setListViewVisible(false);
// Two seconds to cancel the action
mDelayedView.setTotalTimeMs(2000);
// Start the timer
mDelayedView.start();
}
我喜歡這兩個視圖之間切換:
private void setListViewVisible(boolean listViewVisible) {
if(listViewVisible){
mListView.setVisibility(View.VISIBLE);
mDelayedView.setVisibility(View.GONE);
}else{
mListView.setVisibility(View.GONE);
mDelayedView.setVisibility(View.VISIBLE);
}
}
如果按下取消按鈕,切換回列表視圖,以便用戶可以修改他們的選擇:
@Override
public void onTimerSelected(View view) {
// cancel selected, so go back to listview
setListViewVisible(true);
}
我遇到的問題是,當我點擊取消按鈕時,它也觸發列表視圖的onItemClickListener,因此它立即轉回到延遲確認視圖。
我覺得答案應該很簡單,但我很奇怪,同樣的點擊觸發onTimerSelected和onItemClick。
編輯: 我試圖在切換視圖之前添加一個延遲,以查看視圖過渡是否過快並且按下按鈕。
下面是日誌之前加入延遲:
d/AddClimbActivity:的onCreate()
d/AddClimbActivity:setListViewVisible(真)
d/AddClimbActivity:onItemClick
d/AddClimbActivity: setListViewVisible(假)
d/AddClimbActivity:onTimerSelected < - 按下取消按鈕
d/AddClimbActivity:setListViewVisible(真)
d/AddClimbActivity:onItemClick < - 意外行爲
d/AddClimbActivity:setListViewVisible(假)
d/AddClimbActivity:onTimerFinished
新onTimerSelected:
@Override
public void onTimerSelected(View view) {
Log.d(TAG, "onTimerSelected");
// cancel selected, so go back to listview
Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
setListViewVisible(true);
}
}, 50);
Log.d(TAG, "onTimerSelected exit");
}
而且新的日誌:
D/AddClimbActivity:onCreate()
D/Add ClimbActivity:setListViewVisible(真)
d/AddClimbActivity:onItemClick
d/AddClimbActivity:setListViewVisible(假)
d/AddClimbActivity:onTimerSelected
d/AddClimbActivity:onTimerSelected出口
d/AddClimbActivity:setListViewVisible(真)
d/AddClimbActivity:onTimerFinished < - 意外行爲
所以通過將延遲我得到一些意想不到的行爲,其中既onTimerSelected和onTimerFinshed回調被調用。
而不是使用onItemClickListener,執行你的適配器內的點擊事件,如果你在你的ListView –
@vikramthakur不確定的因素點擊一個以上的觀點你是什麼意思。我在listview的每個元素中只有一個視圖,我使用simple_list_item_1和一個textview。 – grantka
你可以請檢查'onItemClick'被調用是你評論'setListViewVisible(true);'在'onTimerSelected'回調?謝謝。 –