gpt4 book ai didi

java - 创建 AlertDialog 时,变量未显示已定义

转载 作者:行者123 更新时间:2023-12-01 16:13:31 25 4
gpt4 key购买 nike

我在使用我的第一个应用程序时遇到问题(一边学习 android studio),一边尝试在用户单击列表项时插入一个警报对话框,以确保他想要删除该项目。但是,我无法让它工作,这是代码,如果您需要更多,只需询问即可。哦,顺便说一句,我是葡萄牙人,所以不要被这些变量搞糊涂了。

public class MainActivity extends AppCompatActivity implements View.OnClickListener, AdapterView.OnItemClickListener {

private EditText tarefasET;
private Button btn;
private ListView tarefasList;

private ArrayList<String> tarefas;
private ArrayAdapter<String> adapt;

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

tarefasET = findViewById(R.id.todoEditText);
btn = findViewById(R.id.addBtn);
tarefasList = findViewById(R.id.lvTarefas);

tarefas = FileHelper.lerData(this);

adapt = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, tarefas);
tarefasList.setAdapter(adapt);

btn.setOnClickListener(this);
tarefasList.setOnItemClickListener(this);

}

@Override
public void onClick(View view) {
switch(view.getId()){
case R.id.addBtn:
String newTarefa = tarefasET.getText().toString();
adapt.add(newTarefa);
tarefasET.setText("");

FileHelper.escreve(tarefas, this);

Toast.makeText(this, "Tarefa Adicionada", Toast.LENGTH_SHORT).show();

break;
}
}

@Override
public void onItemClick(AdapterView<?> adapterView, View view, int posicao, long id) {
AlertDialog confirmDialog = new AlertDialog.Builder(this)
.setTitle("Confirmação")
.setMessage("De certeza que pretende eliminar a tarefa?")
.setPositiveButton(android.R.string.yes, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
tarefas.remove(posicao);
adapt.notifyDataSetChanged();
FileHelper.escreve(tarefas, this);
Toast.makeText(this, "Tarefa Eliminada", Toast.LENGTH_SHORT).show();

}
})
.setNegativeButton(android.R.string.no, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {

}
})
.setIcon(android.R.drawable.ic_dialog_alert)
.show();

}

}

我能做什么?该应用程序应该是一个待办事项列表,我已经可以添加和删除文件。但我想在用户决定删除他必须做的项目时进行确认对话框。但是当我尝试将应用程序启动到模拟器时,代码给出了以下错误。

the error i'm getting

最佳答案

我想您正在尝试通过 this 变量引用您的 Activity 类。在 this 关键字之前使用类名来获取外部引用:

    FileHelper.escreve(tarefas, MainActivity.this);

为什么会出现这个问题?

因为 variable scope 。相同的规则适用于 this 关键字。将其想象为语言为您定义的默认最终变量。

在您的特定情况下,this 关键字引用您创建的 DialogInterface.OnClickListener 实例。如果任何 MainActivity 类级别变量名称与 onClick 中定义的方法级别变量的变量名称发生冲突,也会出现相同的问题:

new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
ArrayList<String> tarefas = new ArrayList();
ArrayList<String> outerTarefas = MainActivity.this.tarefas; // not just tarefas or this.tarefas
}
}

关于java - 创建 AlertDialog 时,变量未显示已定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62469610/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com