2017-10-19 113 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感谢您的建议,我会研究它! –

相关问题