繁体   English   中英

单击对话框之前突出显示的列表视图 - Android

[英]Listview highlighted before clicking dialog box - Android

我想在单击警报对话框读取按钮后突出显示单击的ListView项; 下面的代码完美无缺,但唯一的问题是每当我单击该项目时,它会在对话框显示之前以颜色突出显示。

我怀疑我的代码中缺少,请检查一下。 谢谢

在此处输入图像描述

MainActivity.java

    private boolean[] isSelected; //global variable
    text_listview = findViewById(R.id.textlistview);
    arrayAdapter = new ArrayAdapter(this,R.layout.list_item, list_items);
    text_listview.setAdapter(arrayAdapter);
    isSelected=new boolean[arrayAdapter.getCount()];

    text_listview.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

            alert_dialog(position);

        }
    });
}


public void alert_dialog(final int position){
    final SweetAlertDialog pDialog = new SweetAlertDialog(
            text_message.this, SweetAlertDialog.WARNING_TYPE);
    pDialog.setTitleText("Highlight data?");
    pDialog.setContentText("Please choose the corresponding details");
    pDialog.setCancelText("Unread!");
    pDialog.setConfirmText("Read!");
    pDialog.showCancelButton(true);
    pDialog.show();
    pDialog.setCancelable(false);
    pDialog.setCancelClickListener(new SweetAlertDialog.OnSweetClickListener() {
                @Override
                public void onClick(SweetAlertDialog sDialog) {
                    sDialog.setTitleText("Successfully save!")
                            .setContentText("Item mark as Unread")
                            .setConfirmText("OK")
                            .showCancelButton(false)
                            .setCancelClickListener(null)
                            .setConfirmClickListener(null)
                            .changeAlertType(SweetAlertDialog.SUCCESS_TYPE);
                            sDialog.setCanceledOnTouchOutside(false);
                    isSelected[position]=false;
                    text_listview.setItemChecked(position,false);
                }
            })
            .setConfirmClickListener(new SweetAlertDialog.OnSweetClickListener() {

                @Override
                public void onClick(SweetAlertDialog sDialog) {
                    sDialog.setTitleText("Successfully save!")
                            .setContentText("Item mark as Read")
                            .setConfirmText("OK")
                            .showCancelButton(false)
                            .setCancelClickListener(null)
                            .setConfirmClickListener(null)
                            .changeAlertType(SweetAlertDialog.SUCCESS_TYPE);
                            sDialog.setCanceledOnTouchOutside(false);
                    isSelected[position]=true;
                    text_listview.setItemChecked(position,true);
                }
            })
            .show();
}

布局活动main.xml

<ListView
    android:id="@+id/textlistview"
    android:layout_width="match_parent"
    android:choiceMode="multipleChoice"
    android:layout_height="match_parent" />

可绘制的我的选择器

<?xml version="1.0" encoding="utf-8" ?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item
    android:drawable="@color/lightOrange" android:state_activated="true"
    /></selector>

而不是使用selector您可以通过以编程方式设置颜色来解决此问题。

因此,首先删除选择器 xml 文件,并删除其相关的布局属性。

使用 view.setBackgroundColor(getResources().getColor(R.color.light_orange)) 将未读颜色添加到对话框setCancelClickListener1()和已读颜色到setConfirmClickListener

view是被点击的 ListView 行的根; 您可以从onItemClick回调的 arguments 中获取它。

因此,更改alert_dialog()方法的签名以接受视图:

text_listview.setOnItemClickListener(new AdapterView.OnItemClickListener() {
    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

        alert_dialog(position, view); // <<<<<<<<<< here is the change

    }
});

并在对话框点击中添加调整颜色

public void alert_dialog(final int position, final View view){
    final SweetAlertDialog pDialog = new SweetAlertDialog(
            text_message.this, SweetAlertDialog.WARNING_TYPE);
    pDialog.setTitleText("Highlight data?");
    pDialog.setContentText("Please choose the corresponding details");
    pDialog.setCancelText("Unread!");
    pDialog.setConfirmText("Read!");
    pDialog.showCancelButton(true);
    pDialog.show();
    pDialog.setCancelable(false);
    pDialog.setCancelClickListener(new SweetAlertDialog.OnSweetClickListener() {
                @Override
                public void onClick(SweetAlertDialog sDialog) {
                    sDialog.setTitleText("Successfully save!")
                            .setContentText("Item mark as Unread")
                            .setConfirmText("OK")
                            .showCancelButton(false)
                            .setCancelClickListener(null)
                            .setConfirmClickListener(null)
                            .changeAlertType(SweetAlertDialog.SUCCESS_TYPE);
                            sDialog.setCanceledOnTouchOutside(false);
                    isSelected[position]=false;
                    // text_listview.setItemChecked(position,false); // No need to this line

                    view.setBackgroundColor(getResources().getColor(android.R.color.transparent)); // Setting a transparent color for the unread item
                }
            })
            .setConfirmClickListener(new SweetAlertDialog.OnSweetClickListener() {

                @Override
                public void onClick(SweetAlertDialog sDialog) {
                    sDialog.setTitleText("Successfully save!")
                            .setContentText("Item mark as Read")
                            .setConfirmText("OK")
                            .showCancelButton(false)
                            .setCancelClickListener(null)
                            .setConfirmClickListener(null)
                            .changeAlertType(SweetAlertDialog.SUCCESS_TYPE);
                            sDialog.setCanceledOnTouchOutside(false);
                    isSelected[position]=true;
                    // text_listview.setItemChecked(position,true); // No need to this
                   view.setBackgroundColor(getResources().getColor(R.color.light_orange)); // create  light_orange color resource in colors.xml
                }
            })
            .show();
            updateBooleanArray();
}
public void updateBooleanArray() {
        arrayAdapter = new ArrayAdapter(this,R.layout.list_item, list_items);
        text_listview.setAdapter(arrayAdapter);
        arrayAdapter.notifyDataSetChanged();
        boolean[] tempSelected=new boolean[arrayAdapter.getCount()];

        for(int i=0;i<isSelected.length;i++)
        {
             tempSelected[i]=isSelected[i];
             if(tempSelected[i])
             {
               text_listview.setItemChecked(i,true);
             }
        }

        isSelected = tempSelected;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM