我正在实现一个android shopplinglist应用程序并创建了第二个按钮来删除ListView中从用户输入获取项目的所有项目。如您所见,我实现了一个适配器来将项添加到ListView。据我所知,我需要再次访问我的适配器,删除项目。我在第二个onClick方法,无法访问在第一个onClick方法中创建的适配器。我的代码如下:
import java.util.ArrayList;
public class MainActivity extends AppCompatActivity {
Button btn;
EditText txt;
ListView lst;
Button btn_delete;
ArrayList<String> arrylist = new ArrayList<String>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btn = (Button) findViewById(R.id.btn_send);
txt = (EditText) findViewById(R.id.editText);
lst = (ListView) findViewById(R.id.list);
btn_delete =(Button) findViewById(R.id.button_delete);
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String getInput = txt.getText().toString();
if (arrylist.contains(getInput)){
Toast.makeText(getBaseContext(), getResources().getString(R.string.alreadyContains),Toast.LENGTH_LONG).show();
}
else {
if (getInput == null || getInput.trim().equals("")) {
Toast.makeText(getBaseContext(), getResources().getString(R.string.Emptyinput), Toast.LENGTH_LONG).show();
} else {
arrylist.add(getInput);
ArrayAdapter<String> adapter = new ArrayAdapter<String>(MainActivity.this, android.R.layout.simple_list_item_multiple_choice, arrylist);
lst.setAdapter(adapter);
lst.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
((EditText) findViewById(R.id.editText)).setText(" ");
}
}
}
});
btn_delete.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(MainActivity.this.arrylist.isEmpty()){
Toast.makeText(getBaseContext(), getResources().getString(R.string.delete_isEmpty), Toast.LENGTH_LONG).show();
}
else{
lst.setAdapter(null);
// I need to use notifityDataSetChanged, but cannot access my adapter
}
}
});
}
}
答案 0 :(得分:1)
这可能会有所帮助。 全局声明你的适配器(你已经声明了Button,EditText ...)并在你实际初始化它的地方初始化它(在btn点击监听器中)
要在btn_delete中再次访问它,请尝试使用
if(adapter!=null)
{
adapter.notifyDataSetChanged();
}
如果有帮助请告诉我