【问题标题】:Error on execution due to setOnItemClickListener由于 setOnItemClickListener 导致执行错误
【发布时间】:2022-02-10 19:07:32
【问题描述】:

我尝试在我的手机和 AVD 中执行此代码,但不幸的是应用程序 tp2 已停止,但 gradle 构建完成且没有错误。 有人可以帮我吗?

public class MainActivity extends Activity {
Spinner spinner;
EditText field;
Button addBtn,UpdateBtn,clearBtn;
ArrayAdapter<String> adapter;
ArrayList<String> films = new ArrayList<String>();

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

    spinner= (Spinner) findViewById(R.id.spinner1);
    field = findViewById(R.id.field);
    addBtn= (Button) findViewById(R.id.addbtn);
    UpdateBtn= (Button) findViewById(R.id.updatebtn);
    clearBtn= (Button) findViewById(R.id.clearbtn);

//ADAPTER
    adapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_single_choice,films);
    spinner.setAdapter(adapter);
    spinner.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
            field.setText(films.get(i));
        }

    });
    addBtn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            add();
        }
    });clearBtn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            delete();
        }
    });
    UpdateBtn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            update();
        }
    });

}
//methods
private void add(){
    String film=field.getText().toString();
    if(!film.isEmpty() && film.length() >0){
        adapter.add(film);
        adapter.notifyDataSetChanged();
        field.setText("");
        Toast.makeText(getApplicationContext()," Ajoute" + film, Toast.LENGTH_SHORT).show();
    }
    else {
        Toast.makeText(getApplicationContext(), "Rien a ajouter", Toast.LENGTH_SHORT).show();
    }
}
private void update() {
    String film = field.getText().toString();
    int pos = spinner.getSelectedItemPosition();
    if (!film.isEmpty() && film.length() > 0) {
        adapter.remove(films.get(pos));
        adapter.insert(film,pos);
        adapter.notifyDataSetChanged();
        Toast.makeText(getApplicationContext()," Modifie" + film, Toast.LENGTH_SHORT).show();
                                            }
    else {
        Toast.makeText(getApplicationContext()," Pas Modifie" + film, Toast.LENGTH_SHORT).show();

    }
}
private void delete(){
    int pos = spinner.getSelectedItemPosition();
    if(pos > -1){
        adapter.remove(films.get(pos));
        adapter.notifyDataSetChanged();
        Toast.makeText(getApplicationContext()," Supprime" , Toast.LENGTH_SHORT).show();
        field.setText("");
                    }
    else{
        Toast.makeText(getApplicationContext()," Rien a supprimer" , Toast.LENGTH_SHORT).show();

    }
}


}

它似乎在工作,但实际上它崩溃了。活动崩溃,我无法找出原因,因为没有显示其他 (id)。抱歉英语不好

【问题讨论】:

  • 您在 Logcat 中得到什么错误信息?
  • 您需要更多的空检查,并且您可能可以将您的类成员声明为 final,因为它们是在 onCreate 中初始化的。
  • 检查我的答案。总是尝试发布错误日志@Ahmed
  • 别忘了标记我的答案@Ahmed

标签: java android spinner


【解决方案1】:

setOnItemClickListener 不能与 Spinner 一起使用。请改用此setOnItemSelectedListener

【讨论】:

  • @Ahmed 你很高兴
【解决方案2】:

尝试将字段转换为 EditText

field = (EditText)findViewById(R.id.field);

如果还有问题,请分享错误信息

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-08-13
    • 2013-04-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-29
    相关资源
    最近更新 更多