Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/386.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在设备方向更改期间在上下文操作栏中保持高亮显示的ListView项及其状态_Java_Android_Eclipse_Listview_Android Arrayadapter - Fatal编程技术网

Java 如何在设备方向更改期间在上下文操作栏中保持高亮显示的ListView项及其状态

Java 如何在设备方向更改期间在上下文操作栏中保持高亮显示的ListView项及其状态,java,android,eclipse,listview,android-arrayadapter,Java,Android,Eclipse,Listview,Android Arrayadapter,我实现了一个listview,其选择模式设置为choice\u mode\u MULTIPLE\u mode。下面是一些代码: listView.setMultiChoiceModeListener(new MultiChoiceModeListener() { private int check = 0; @Override public boolean onPrepareActionMode(ActionMode a

我实现了一个listview,其选择模式设置为choice\u mode\u MULTIPLE\u mode。下面是一些代码:

listView.setMultiChoiceModeListener(new MultiChoiceModeListener() {

            private int check = 0;

            @Override
            public boolean onPrepareActionMode(ActionMode arg0, Menu arg1) {
                // TODO Auto-generated method stub
                return false;
            }

            @Override
            public void onDestroyActionMode(ActionMode arg0) {
                // TODO Auto-generated method stub
                adapter.clearSelection();
            }

            @Override
            public boolean onCreateActionMode(ActionMode arg0, Menu arg1) {
                // TODO Auto-generated method stub

                check = 0;

                MenuInflater inflater = getMenuInflater();
                inflater.inflate(R.menu.context_menu, arg1);
                return true;
            }

            @Override
            public boolean onActionItemClicked(final ActionMode arg0,
                    MenuItem arg1) {
                // TODO Auto-generated method stub
                if ((PinPad.mMediaPlayer != null)
                        && (!PinPad.mMediaPlayer.isPlaying())) {
                    switch (arg1.getItemId()) {
                    case R.id.item_delete:

                        LayoutInflater inflater = getLayoutInflater();
                        View dialogLayout = inflater.inflate(
                                R.layout.delete_confirmation, null);
                        final AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(
                                MainListActivity.this);
                        alertDialogBuilder.setView(dialogLayout);

                        final AlertDialog confirmationDialog = alertDialogBuilder
                                .create();
                        confirmationDialog.show();

                        Button buttonNo = (Button) dialogLayout
                                .findViewById(R.id.buttonNo);
                        Button buttonYes = (Button) dialogLayout
                                .findViewById(R.id.buttonYes);

                        buttonNo.setOnClickListener(new View.OnClickListener() {

                            @Override
                            public void onClick(View view) {
                                // TODO Auto-generated method stub
                                weGotTheTime.clear();
                                weGotTheType.clear();
                                weGotTheDays.clear();
                                weGotTheRings.clear();

                                weGotTheIDs.clear();

                                confirmationDialog.dismiss();
                                adapter.clearSelection();
                                adapter.notifyDataSetChanged();
                                refreshListView();
                                check = 0;
                                arg0.finish();
                            }
                        });

                        buttonYes
                                .setOnClickListener(new View.OnClickListener() {

                                    @Override
                                    public void onClick(View v) {
                                        // TODO Auto-generated method stub
                                        databaseData.open();
                                        databaseData.deleteEntries(
                                                weGotTheTime, weGotTheType,
                                                weGotTheDays);
                                        databaseData.close();

                                        new AlarmTask(MainListActivity.this,
                                                weGotTheIDs, weGotTheDays,
                                                weGotTheRings, weGotTheType,
                                                weGotTheTime).cancelAl();

                                        weGotTheTime.clear();
                                        weGotTheType.clear();
                                        weGotTheDays.clear();
                                        weGotTheRings.clear();

                                        weGotTheIDs.clear();

                                        confirmationDialog.dismiss();
                                        adapter.clearSelection();
                                        adapter.notifyDataSetChanged();
                                        refreshListView();
                                        check = 0;
                                        arg0.finish();
                                    }
                                });
                        break;
                    }

                    return true;
                } else if (PinPad.mMediaPlayer == null) {
                    switch (arg1.getItemId()) {
                    case R.id.item_delete:

                        LayoutInflater inflater = getLayoutInflater();
                        View dialogLayout = inflater.inflate(
                                R.layout.delete_confirmation, null);
                        final AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(
                                MainListActivity.this);
                        alertDialogBuilder.setView(dialogLayout);

                        final AlertDialog confirmationDialog = alertDialogBuilder
                                .create();
                        confirmationDialog.show();

                        Button buttonNo = (Button) dialogLayout
                                .findViewById(R.id.buttonNo);
                        Button buttonYes = (Button) dialogLayout
                                .findViewById(R.id.buttonYes);

                        buttonNo.setOnClickListener(new View.OnClickListener() {

                            @Override
                            public void onClick(View view) {
                                // TODO Auto-generated method stub
                                weGotTheTime.clear();
                                weGotTheType.clear();
                                weGotTheDays.clear();
                                weGotTheRings.clear();

                                weGotTheIDs.clear();

                                confirmationDialog.dismiss();
                                adapter.clearSelection();
                                adapter.notifyDataSetChanged();
                                refreshListView();
                                check = 0;
                                arg0.finish();
                            }
                        });

                        buttonYes
                                .setOnClickListener(new View.OnClickListener() {

                                    @Override
                                    public void onClick(View v) {
                                        // TODO Auto-generated method stub
                                        databaseData.open();
                                        databaseData.deleteEntries(
                                                weGotTheTime, weGotTheType,
                                                weGotTheDays);
                                        databaseData.close();

                                        new AlarmTask(MainListActivity.this,
                                                weGotTheIDs, weGotTheDays,
                                                weGotTheRings, weGotTheType,
                                                weGotTheTime).cancelAl();

                                        weGotTheTime.clear();
                                        weGotTheType.clear();
                                        weGotTheDays.clear();
                                        weGotTheRings.clear();

                                        weGotTheIDs.clear();

                                        confirmationDialog.dismiss();
                                        adapter.clearSelection();
                                        adapter.notifyDataSetChanged();
                                        refreshListView();
                                        check = 0;
                                        arg0.finish();
                                    }
                                });
                        break;
                    }

                    return true;
                } else {
                    Toast.makeText(
                            getApplicationContext(),
                            "Cannot delete alarm(s). Make sure no alarm is currently ringing.",
                            Toast.LENGTH_SHORT).show();
                    adapter.clearSelection();
                    check = 0;
                    arg0.finish();
                    return true;
                }
            }

            @Override
            public void onItemCheckedStateChanged(ActionMode mode,
                    int position, long id, boolean checked) {
                // TODO Auto-generated method stub
                td = results.get(position).getDays();

                if (checked) {

                    check++;
                    adapter.setNewSelection(position, checked);
                    weGotTheTime.add(results.get(position).getTime());
                    weGotTheType.add(results.get(position).getType());
                    weGotTheDays.add(results.get(position).getDays());
                    weGotTheIDs.add(results.get(position).getID());
                    weGotTheRings.add(results.get(position).getTitle());
                } else {
                    check--;
                    adapter.removeSelection(position);
                    weGotTheTime.remove(results.get(position).getTime());
                    weGotTheType.remove(results.get(position).getType());
                    weGotTheDays.remove(results.get(position).getDays());
                    weGotTheIDs.remove(results.get(position).getID());
                    weGotTheRings.remove(results.get(position).getTitle());
                }

                mode.setTitle(check + " selected");
            }
        });

        listView.setOnItemLongClickListener(new OnItemLongClickListener() {

            @Override
            public boolean onItemLongClick(AdapterView<?> arg0, View arg1,
                    int arg2, long arg3) {
                // TODO Auto-generated method stub
                listView.setItemChecked(arg2, !adapter.isPositionChecked(arg2));
                vibrator.vibrate(50);
                return false;
            }
        });
这非常有效,长时间单击listview项目会高亮显示它,效果很好。但是,一旦我将设备方向从纵向更改为横向,反之亦然,高亮显示消失,上下文操作栏仍在显示,但未显示任何选定内容。有什么帮助吗?我试过制作选择器和抽绳器,然后用手工的方式来做,但还是没有成功。我在这个问题上花了几个星期,我想知道是否有人知道如何解决它


谢谢。

看看您是否可以使用此帮助:

android:configChanges=方向|键盘隐藏

有关完整实施的更多信息,请参阅:


必须重新创建您的活动,您是否尝试使用onSaveInstanceState和onRestoreInstanceState保留信息?我有,它只保存了所做选择的数量。奇怪的是,当我调用listView.setItemCheckedposition时,为true;好像什么都没发生。我试过使用这种方法,但不幸的是,它不起作用。