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-seo的头像K-seoSEO优化员
上一篇 2024-01-01 23:13
下一篇 2024-01-01 23:21

相关推荐

  • html5扇子怎么 画

    HTML5扇子的绘制涉及到了HTML5的Canvas API,这是一个强大的工具,可以用来在网页上绘制图形,以下是一个简单的步骤,以及一些相关的技术介绍。1、创建Canvas元素我们需要在HTML文档中创建一个Canvas元素,这个元素将作为我们绘制扇子的平台,Canvas元素的尺寸可以通过width和height属性来设置。&amp……

    2024-03-25
    0131
  • 用Context ctx=new InitialContext;出错

    在Java编程中,InitialContext ctx = new InitialContext(); 是一个常见的代码片段,用于获取JNDI(Java命名和目录接口)上下文,JNDI允许Java应用程序查找和访问分布式系统中的命名和目录服务,有时候在使用这段代码时可能会遇到一些错误,本文将详细介绍这些错误及其解决方法。错误1:类路径……

    2024-01-13
    0155
  • android bindservice详解

    Android bindservice失败的原因和解决方法在Android开发中,bindService是一个非常重要的方法,用于实现服务端与客户端之间的通信,有时候在使用bindService时可能会遇到失败的情况,本文将详细介绍bindService失败的原因以及解决方法,并在最后提出两个相关问题供大家参考。bindService……

    2023-12-25
    0248
  • ASP.NET session.timeout怎么设置

    ASP.NET session.timeout是ASP.NET中的一个重要设置,它决定了用户在一个会话(session)中可以保持活动状态的时间,这个设置对于确保用户的会话在一段时间后过期并使他们能够登出非常有用,本文将详细介绍如何设置ASP.NET的session.timeout,以及相关的技术介绍和解答。ASP.NET sessi……

    2024-01-02
    0104
  • tomcat启动报错lifecycle如何解决

    Tomcat启动报错lifecycle的原因Tomcat是一个用于部署Java Web应用程序的Web服务器,它提供了一个完整的Servlet容器,包括管理servlet、JSP和其他Java技术,在Tomcat中,一个web应用被抽象为一个叫做“Context”的对象,而每个Context对象都包含一个或多个“Host”对象,在To……

    2024-01-30
    0218
  • 怎么用html画八卦图

    在HTML中,我们无法直接绘制图形,但是我们可以使用HTML和CSS结合的方式,通过一些技巧来实现图形的绘制,八卦图是一种常见的中国传统符号,它由两个相互重叠的圆形组成,每个圆形内部有四个等分的区域,每个区域都有一个特定的符号,下面,我们将详细介绍如何使用HTML和CSS来绘制八卦图。步骤一:创建HTML结构我们需要创建一个HTML文……

    2024-03-18
    0153

发表回复

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

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