根据职位设置偏好背景

问题描述 投票:0回答:1

我正在开发使用Preferenceandroidx.preference.Preference)的应用程序。我正在使用PreferenceCategory并在运行时向其添加Preerence

我的要求是PreferenceCategory中的第一,中间和最后一个首选项应具有不同的背景和布局。我为此使用以下代码:

public static class SettingsFragment extends PreferenceFragmentCompat {
    Activity activity = null;
    String TAG = "SettingsFragment";
    @Override
    public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
        setPreferencesFromResource(R.xml.root_preferences, rootKey);
    }

    @Override
    public void onAttach(@NonNull Context context) {
        super.onAttach(context);
        activity = (Activity) getActivity();
    }

    @Override
    public void onResume() {
        super.onResume();
        PreferenceCategory category = findPreference("MyPreference");
        category.setLayoutResource(R.layout.preference_group_layout);
        MyAdapter myAdapter = new MyAdapter(category);
        for(int i=0;i<10;i++) {
            Preference preference = new Preference(activity);
            preference.setKey("P" + i);
            preference.setLayoutResource(R.layout.preference_layout);
            category.addPreference(preference);
            Log.d(TAG,"" + category.getPreferenceCount());
            myAdapter.notifyDataSetChanged();
        }

    }
}

class MyAdapter extends PreferenceGroupAdapter {
    String TAG = "MyAdapter";
    public MyAdapter(PreferenceGroup preferenceGroup) {
        super(preferenceGroup);
    }

    @Override
    public int getItemCount() {
        return super.getItemCount();
    }

    @Override
    public Preference getItem(int position) {
        return super.getItem(position);
    }

    @Override
    public long getItemId(int position) {
        return super.getItemId(position);
    }

    @NonNull
    @Override
    public PreferenceViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        Log.d(TAG,"onCreateViewHolder called");
        return super.onCreateViewHolder(parent, viewType);
    }

    @Override
    public void onBindViewHolder(@NonNull PreferenceViewHolder holder, int position) {
        Log.d(TAG,"onBindViewHolder called");
        super.onBindViewHolder(holder, position);
    }
}

但是这并未在布局中显示我的Prefrence。我在互联网上搜索了此内容,但没有找到任何类似的示例。如何添加Preference并根据其位置设置其布局。

android android-layout android-preferences preferenceactivity android-10.0
1个回答
0
投票

尝试更改onBindViewHolder中的颜色:

@Override
public void onBindViewHolder(@NonNull PreferenceViewHolder holder, int position) {
    Log.d(TAG,"onBindViewHolder called");
    super.onBindViewHolder(holder, position);
    switch (position){
        case 0:
            holder.itemView.setBackgroundColor(Color.WHITE);
        case 1:
            holder.itemView.setBackgroundColor(Color.GREEN);
            .....
            .....
        default: 
            holder.itemView.setBackgroundColor(Color.GRAY);
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.