java - 对象未从 ListView 中删除

标签 java android-studio

我正在 Android Studios 中创建一个简单的任务列表应用。

我有以下两项 Activity (删除了导入和包规范):

MainActivity.java

public class MainActivity extends AppCompatActivity implements View.OnClickListener, AdapterView.OnItemClickListener {
    EditText taskAdd;
    Button add;
    public ListView tasks;
    public Integer pos = 0;
    public ArrayList<String> taskArray;
    public ArrayAdapter<String> adapter;
    @Override
    protected void onCreate(Bundle savedInstanceState){
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        taskAdd = findViewById(R.id.taskAdd);
        add = findViewById(R.id.add);
        tasks = findViewById(R.id.tasks);
        taskArray = FileHelper.readData(this);
        adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, taskArray);
        tasks.setAdapter(adapter);
        add.setOnClickListener(this);
        tasks.setOnItemClickListener(this);
    }

    @Override
    public void onClick(View v) {
        switch(v.getId()){
            case R.id.add:
                String entered = taskAdd.getText().toString();
                if (entered != "" || entered != null || entered != "null") {
                    adapter.add(entered);
                    taskAdd.setText("");

                    FileHelper.writeData(taskArray, this);
                    Toast.makeText(this, "Task Added!", Toast.LENGTH_SHORT).show();
                }
                break;
        }
    }
    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
        pos = position;
        Intent intent = new Intent(MainActivity.this, Pop.class);
        startActivity(intent);
    }
    @Override
    protected void onNewIntent(Intent intent) {
        super.onNewIntent(intent);
        setIntent(intent);
        processExtraData();
    }
    private void processExtraData(){
        Bundle extras = getIntent().getExtras();
        if (extras != null) {
            int value = extras.getInt("Value");
            if (value == 1) {
                taskArray.remove(pos);
                adapter.notifyDataSetChanged();
                Toast.makeText(this, "Task Removed!", Toast.LENGTH_SHORT).show();
            }
        }
    }
}

Pop.java(弹出窗口)

public class Pop extends Activity implements View.OnClickListener {
    Button deleteButton;
    Button finishedButton;
    Button timerButton;
    protected void onCreate(Bundle savedInstanceState){
        super.onCreate(savedInstanceState);
        setContentView(R.layout.popwindow);
        deleteButton = findViewById(R.id.deleteButton);
        DisplayMetrics dm = new DisplayMetrics();
        getWindowManager().getDefaultDisplay().getMetrics(dm);
        int width = dm.widthPixels;
        int height = dm.heightPixels;
        getWindow().setLayout((int)(width*0.5),(int)(height*0.5));
        deleteButton.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        Intent i = new Intent(this, MainActivity.class);
        i.putExtra("Value", 1);
        startActivity(i);
    }
}

在 Pop.java 中单击 deleteButton 后,MainActivity.java 中的 processExtraData 应该运行。 Toast 确实出现,但 ListView 中选定的对象并未被删除。也不会抛出任何错误。另外,使用Log.d检查taskArray的大小证实这不仅仅是一个图形问题。为什么会出现这种情况,我应该如何解决它?

感谢您提前回复。

最佳答案

问题是您使用的是对象引用而不是原始数据类型,因此当您调用 taskArray.remove(pos) 时,它会查找 pos 对象而不是其表示的整数值。

而不是:

taskArray.remove(pos);

尝试:

taskArray.remove(pos.intValue());

关于java - 对象未从 ListView 中删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57360026/

相关文章:

java - 从数据库加载详细信息时出现游标错误

Android Studio - 错误 :Uncaught translation error: com. android.dx.cf.code.SimException:本地 0001:无效

java - 错误 :java. lang.IllegalArgumentException:找到意外的类型标记 67

java - Log4j 记录到单独的文件

java.lang.NoClassDefFoundError : rcaller/RCaller in java-ee

java - 安卓 BigInteger ArithmeticException

java - Android,如何在项目中包含不是 JAR 文件的特定库?

java - 如何获得可能只给出叶证书的证书链?

java - 输出为 "NaN"

android - 检查哪个类正在使用 Android 库的 API