Android中Fragmen首选项使用自定义的ListPreference的方法

ListPreference简介

ListPreference是Android中的一种对话框样式,它允许用户从一个预定义的列表中选择一个选项,ListPreference通常用于需要用户从有限的选项中进行选择的情况,例如设置语言、屏幕方向等,与Spinner相比,ListPreference提供了更加简洁的界面,同时支持搜索功能,方便用户快速找到所需的选项。

自定义ListPreference的方法

要使用自定义的ListPreference,我们需要继承ListPreference类,并重写其onBindView方法,在onBindView方法中,我们可以自定义ListPreference的布局和显示内容,以下是一个简单的示例:

Android中Fragmen首选项使用自定义的ListPreference的方法

1、创建一个自定义的ListPreference类,继承自AppCompatActivity中的ListPreference:

import android.content.Context;
import android.content.DialogInterface;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.TextView;
import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.app.AppCompatActivity;
import androidx.preference.ListPreference;
public class CustomListPreference extends ListPreference {
    private Context context;
    private String[] entries;
    private String entryValue;
    private OnEntrySetListener onEntrySetListener;
    public CustomListPreference(Context context, String title, String[] entries) {
        super(context);
        this.context = context;
        this.entries = entries;
    }
    public void setEntryValue(String entryValue) {
        this.entryValue = entryValue;
    }
    public void setOnEntrySetListener(OnEntrySetListener onEntrySetListener) {
        this.onEntrySetListener = onEntrySetListener;
    }
    @Override
    protected void onBindView(View view, final CharSequence defaultValue) {
        // 自定义布局文件,这里假设为custom_list_preference_layout.xml
        LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        View customView = inflater.inflate(R.layout.custom_list_preference_layout, null);
        ArrayAdapter<CharSequence> adapter = new ArrayAdapter<>(context, android.R.layout.simple_spinner_item, entries);
        adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        TextView textView = customView.findViewById(R.id.textView);
        textView.setText(entryValue);
        ListPreference listPreference = (ListPreference) view;
        listPreference.setAdapter(adapter);
        listPreference.setEntries(entries);
        listPreference.setEntryValues(entries);
        listPreference.setSummary(defaultValue);
        listPreference.setOnItemSelectedListener(new OnItemSelectedListener() {
            @Override
            public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
                if (onEntrySetListener != null) {
                    onEntrySetListener.onEntrySelected(position);
                }
            }
        });
        super.setOnBindViewListener((parent, viewHolder) -> viewHolder.itemView == customView);
    }
}

2、在res/layout目录下创建一个名为custom_list_preference_layout.xml的布局文件,用于自定义ListPreference的布局:

Android中Fragmen首选项使用自定义的ListPreference的方法

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal">
    <TextView xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/textView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />
</LinearLayout>

3、在Activity或Fragment中使用自定义的ListPreference:

CustomListPreference customListPreference = findViewById(R.id.custom_list_preference);
String[] entries = {"Option1", "Option2", "Option3"};
customListPreference.setEntries(entries);
customListPreference.setEntryValues(entries);
customListPreference.setSummary("Default"); // 设置默认选项的描述文本
customListPreference.setOnItemSelectedListener((parent, view, position, id) -> Toast.makeText(this, "选中了:" + entries[position], Toast.LENGTH_SHORT).show()); // 当选项改变时,显示提示信息
customListPreference = findViewById(R.id.custom_list_preference); // 确保在设置监听器后获取到正确的实例对象,避免空指针异常
customListPreference.setOnEntrySetListener((position) -> Toast.makeText(this, "选中了:" + entries[position], Toast

原创文章,作者:K-seo,如若转载,请注明出处:https://www.kdun.cn/ask/189687.html

(0)
K-seoK-seoSEO优化员
上一篇 2024年1月1日 23:13
下一篇 2024年1月1日 23:21

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

免备案 高防CDN 无视CC/DDOS攻击 限时秒杀,10元即可体验  (专业解决各类攻击)>>点击进入