我正在开发使用Preference
(androidx.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
并根据其位置设置其布局。
尝试更改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);
}
}