有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java在更新arrayAdapter/listView之前更新最终列表

我试图在用户删除条目后更新listview。我发现我需要使用notifyDataSetChanged()。但是要使用它,我需要首先更新arrayList(正确吗?)。但我不能改变这一点,因为该列表已被宣布为最终列表

它是最终版本,因为我需要在getView方法中使用它,否则Android Studio会抱怨无法通过内部类访问它

有关守则:

        final List<String> arrayList = mydb.getAllAlarms();
        final List<String> timesList = mydb.getAllAlarmTimes();
        final ArrayList<Integer> arrayListID = mydb.getAllAlarmIDs();

        boolean isEmpty = false;
        if (arrayList.isEmpty()) { //default
            arrayList.add("You have no alarms");
            timesList.add("");
            isEmpty = true;
        }

        //initialise arrayadapter to show stuff in the listview
        final ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(getApplicationContext(),
                安卓.R.layout.simple_list_item_2, 安卓.R.id.text1, arrayList) {
            public View getView(int position, View convertView, ViewGroup parent) {

                TextView text1 = (TextView) convertView.findViewById(安卓.R.id.text1);
                TextView text2 = (TextView) convertView.findViewById(安卓.R.id.text2);
                text1.setText(arrayList.get(position));
                text2.setText(timesList.get(position));
                return convertView;
            }
        };

        final ListView listView = (ListView) findViewById(R.id.listView1);
        listView.setAdapter(arrayAdapter); //set our custom adapter to the listview

        if (!isEmpty) { //only set clicklistener if there are alarms
            //set clicklistener for items in the listview
            listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
                //...
            });
            listView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
                @Override
                public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {

                    //first, find the corresponding database id
                    final int idToDelete = arrayListID.get(position);

                    //show dialog
                    AlertDialog.Builder alert = new AlertDialog.Builder(
                            MainActivity.this);
                    alert.setTitle("Delete alarm");
                    alert.setMessage("Are you sure?");
                    alert.setPositiveButton("YES", new DialogInterface.OnClickListener() {

                        @Override
                        public void onClick(DialogInterface dialog, int which) {
                            mydb.deleteAlarm(idToDelete);
                            //cancel alarm as well
                            ShowAlarm.cancelAlarmIfExists(getApplicationContext(), idToDelete);

                            dialog.dismiss();

                        }
                    });

                    //...
                    alert.show();

                    //PROBLEM LIES HERE

                    //reload listview
//                    arrayList = mydb.getAllAlarms(); //not possible because final List

                    arrayAdapter.clear();
                    arrayAdapter.addAll(arrayList);

                    arrayAdapter.notifyDataSetChanged();
//                    listView.invalidateViews();
//                    listView.setAdapter(arrayAdapter);

                    return true;
                }
            });

        }

共 (1) 个答案

  1. # 1 楼答案

    您可以使用arrayAdapter.getItem(position);从arraylist中获取一个项并执行操作,以便正确反映该项