从另一种方法访问Android工作室中的适配器

时间:2016-12-18 18:23:39

标签: android listview

我正在实现一个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 


                }
            }
        });


}

}

1 个答案:

答案 0 :(得分:1)

这可能会有所帮助。 全局声明你的适配器(你已经声明了Button,EditText ...)并在你实际初始化它的地方初始化它(在btn点击监听器中)

要在btn_delete中再次访问它,请尝试使用

if(adapter!=null)
{
  adapter.notifyDataSetChanged();
}

如果有帮助请告诉我

相关问题