2017-10-19 122 views
-1

我寫了一個簡單的程序,它將顯示一個ArrayList,用戶可以選擇一個項目並用按鈕刪除它。檢查是否選擇了setOnItemClickListener

如果用戶沒有選擇一個項目,而是繼續點擊刪除按鈕,他們將刪除ArrayList上的第一個項目。我如何防止這種情況發生?當選擇了一個項目的刪除按鈕應該只運行,所以我需要找到一個方法來檢查該

int positionID; 
ListView listview; 
ArrayList<String> valuesArray = new ArrayList<String>(); 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    listview = (ListView) findViewById(R.id.listview); 

    valuesArray.add("a"); 
    valuesArray.add("b"); 
    valuesArray.add("c"); 
    valuesArray.add("d"); 
    valuesArray.add("e"); 

    ArrayAdapter<String> adapter = new ArrayAdapter<String>(getApplicationContext(), 
      android.R.layout.simple_list_item_1, valuesArray); 
    listview.setAdapter(adapter); 


    listview.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> adapter, View view, int position, long id) { 
      positionID = (int) id; 
     } 
    }); 
} 

public void onClickDelete(View v) { 
//need to check if an item is selected. if so, run code below 
    valuesArray.remove(positionID); 

    ArrayAdapter<String> adapter = new ArrayAdapter<String>(getApplicationContext(), android.R.layout.simple_list_item_1, valuesArray); 
    listview.setAdapter(adapter); 
} 
+0

爲什麼您不嘗試設置已刪除按鈕的可見性,即如果選擇了某個項目,則將刪除按鈕設置爲可見,這將改善用戶體驗。 – Sree

回答

2
基於代碼

您提供,這是有可能發生的,因爲默認爲positionID初始化值設置爲0.要解決此問題,您可以初始化int positionID = -1,然後在onClickDelete方法中執行檢查以確保positionID無效。像這樣:

public void onClickDelete(View v) { 
    if (positionID < 0) return; 
    // continue your code here 
} 

順便說一句,你應該修復其他一些東西。您應該直接與adapter進行互動,因此您應該使用adapter.remove(positionID)而不是valuesArray.remove(positionID)。這將自動更新適配器併爲您刷新ListView,以便您可以擺脫onClickDelete方法的最後兩行。

除非您打算直接在代碼中的其他地方操縱它,否則只能在onCreate方法中使valuesArray爲局部變量。如果您選擇這樣做,您可以撥打adapter.notifyDataSetChanged()使適配器刷新您的ListView

+0

@ D.Kate除此之外,您還可以玩刪除按鈕的alpha值。就像我在我的項目中一樣,在xml中將alpha設置爲.2,然後當選擇item時,將其設置爲.8,然後在選擇onClickDelete時將alpha設置爲.2。這看起來很棒,效果很好。 –

+0

@布萊恩這工作,謝謝!我嘗試了關於適配器的其他建議,但它不是全球性的,我對編碼還很陌生,所以不知道如何將它應用於我的代碼:( –

+0

@LalitSinghFauzdar感謝您的建議,我會研究它! –