gpt4 book ai didi

java - 如何将 RecyclerView 所有元素的背景更改为 SharedPreferences 保存的颜色?

转载 作者:行者123 更新时间:2023-12-02 04:46:08 25 4
gpt4 key购买 nike

我有一个 PreferenceScreen,我在其中保存一些参数,并且我想使用此参数来更改位于应用程序其他位置的 recyclerview 的所有元素的视觉效果。

我不知道在创建元素时如何或在何处放置值来设置此首选项。

Recycler 的所有元素都包含在一个带有一些 Textview 的水平线性布局中;我想更改布局的背景颜色和 TextView 的文本颜色(使用首选项值)

我尝试从 RecyclerView 所在的 View 恢复并传递这些数据,但我不知道如何在适配器中执行此操作

这是适配器代码

public class Adaptagrande extends RecyclerView.Adapter<Adaptagrande.jHolder>{

List<Juego> jueguiss;
private Context micontext;

public Adaptagrande(Context micontext, List<Juego> jueguiss){
this.jueguiss = jueguiss;
this.micontext = micontext;
}

@NonNull
@Override
public jHolder onCreateViewHolder(ViewGroup grupo, int i){
View vv = LayoutInflater.from(grupo.getContext()).inflate(R.layout.layout_juegofull, grupo, false);
jHolder holdeer = new jHolder(vv);

return holdeer;
}

@Override
public void onBindViewHolder(final jHolder holder, final int pos){
final Juego j1 = jueguiss.get(pos);
holder.titxtlist.setText(j1.getTitulo());
holder.platxtlist.setText(j1.getPlataforma());
holder.posetxtlist.setText(j1.getPosesion());
holder.formatxtlist.setText(j1.getFisico());
holder.avatxtlist.setText(j1.getAvance());
holder.vectxtlist.setText(j1.getVeces());
//cargapref();
}

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

public static class jHolder extends RecyclerView.ViewHolder{

public TextView titxtlist;
public TextView platxtlist;
public TextView posetxtlist;
public TextView formatxtlist;
public TextView avatxtlist;
public TextView vectxtlist;

//SharedPreferences preferences;

public jHolder(View itemViewer){
super(itemViewer);
titxtlist=(TextView) itemView.findViewById(R.id.titxtlist);
platxtlist=(TextView) itemView.findViewById(R.id.platxtlist);
posetxtlist=(TextView) itemView.findViewById(R.id.posetxtlist);
formatxtlist=(TextView) itemView.findViewById(R.id.formatxtlist);
avatxtlist=(TextView) itemView.findViewById(R.id.avatxtlist);
vectxtlist=(TextView) itemView.findViewById(R.id.vectxtlist);


}
}
}

这是回收器中每个元素的 XML

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#505050"
android:orientation="vertical">

<TextView
android:id="@+id/textView8"
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="#C4E0E0E0"
android:paddingLeft="8dp"
android:paddingTop="2dp"
android:paddingRight="8dp"
android:paddingBottom="2dp" />

<LinearLayout
android:id="@+id/contene2"
android:layout_width="match_parent"
android:background="#525252"
android:layout_height="match_parent"
android:orientation="horizontal">

<TextView
android:id="@+id/titxtlist"
android:layout_width="80dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="TextView"
android:textColor="#FFF" />

<TextView
android:id="@+id/platxtlist"
android:layout_width="50dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="center"
android:text="TextView"
android:textAlignment="center"
android:textColor="#FFF" />

<TextView
android:id="@+id/posetxtlist"
android:layout_width="50dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="center"
android:text="TextView"
android:textAlignment="center"
android:textColor="#FFF" />

<TextView
android:id="@+id/formatxtlist"
android:layout_width="50dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="center"
android:text="TextView"
android:textAlignment="center"
android:textColor="#FFF" />

<TextView
android:id="@+id/avatxtlist"
android:layout_width="50dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="center"
android:text="TextView"
android:textAlignment="center"
android:textColor="#FFF" />

<TextView
android:id="@+id/vectxtlist"
android:layout_width="50dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="center"
android:text="TextView"
android:textAlignment="center"
android:textColor="#FFF" />
</LinearLayout>

<TextView
android:id="@+id/textView10"
android:layout_width="match_parent"
android:background="#C4E0E0E0"
android:layout_height="1dp"
android:paddingLeft="8dp"
android:paddingTop="2dp"
android:paddingRight="8dp"
android:paddingBottom="2dp" />

</LinearLayout>

这是首选项和类的 xml 文件

public class SettingFragment extends PreferenceFragmentCompat {


@Override
public void onCreatePreferences(Bundle bundle, String s) {
setPreferencesFromResource(R.xml.preferences, s);
}


}

<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">

<PreferenceCategory
android:title="Visual lista grande">


<ListPreference
android:defaultValue="1"
android:entries="@array/colorsfondo"
android:entryValues="@array/colorsfondo"
android:key="list_preference_1"
android:title="Color de fondo" />
</PreferenceCategory>

</PreferenceScreen>

如果我在其他地方恢复数据或修改 PreferenceScreen 中的选择,它会正常工作。

如果我能够从首选项中恢复字符串元素,并通过“if”语句或“Switch - case”更改背景颜色,那就完美了

最佳答案

好的,我修好了

在Adapter类(Adaptagrande)的onBindViewHolder上,添加了这个方法


@Override
public void onBindViewHolder(final jHolder holder, final int pos){
final Juego j1 = jueguiss.get(pos);
holder.titxtlist.setText(j1.getTitulo());
holder.platxtlist.setText(j1.getPlataforma());
holder.posetxtlist.setText(j1.getPosesion());
holder.formatxtlist.setText(j1.getFisico());
holder.avatxtlist.setText(j1.getAvance());
holder.vectxtlist.setText(j1.getVeces());
cargapref(holder);
}

private void cargapref(jHolder holder) {

final String backgrndcolor = PreferenceManager.getDefaultSharedPreferences(micontext).getString("list_preference_1", "");
final String textcolor = PreferenceManager.getDefaultSharedPreferences(micontext).getString("list_preference_2","");


switch (backgrndcolor){
case "Naranja" :
holder.contenedor.setBackgroundColor(Color.argb(255,255, 139, 30));
break;
case "Rojo" :
holder.contenedor.setBackgroundColor(Color.argb(255,255, 0, 0));
break;
case "Amarillo" :
holder.contenedor.setBackgroundColor(Color.argb(255,255, 255, 0));
break;
case "Verde" :
holder.contenedor.setBackgroundColor(Color.argb(255,0, 255, 0));
break;
case "Azul" :
holder.contenedor.setBackgroundColor(Color.argb(255,0, 0, 255));
break;
case "Morado" :
holder.contenedor.setBackgroundColor(Color.argb(255,255, 0, 255));
break;
case "Blanco" :
holder.contenedor.setBackgroundColor(Color.argb(255,255, 255, 255));
break;
case "Negro" :
holder.contenedor.setBackgroundColor(Color.argb(255,0, 0, 0));
break;
}

switch (textcolor) {
case "Naranja":
holder.titxtlist.setTextColor(Color.argb(255, 252, 164, 40));
holder.platxtlist.setTextColor(Color.argb(255, 252, 164, 40));
holder.posetxtlist.setTextColor(Color.argb(255, 252, 164, 40));
holder.formatxtlist.setTextColor(Color.argb(255, 252, 164, 40));
holder.avatxtlist.setTextColor(Color.argb(255, 252, 164, 40));
holder.vectxtlist.setTextColor(Color.argb(255, 252, 164, 40));
break;
case "Rojo":
holder.titxtlist.setTextColor(Color.argb(255, 252, 30, 30));
holder.platxtlist.setTextColor(Color.argb(255, 252, 30, 30));
holder.posetxtlist.setTextColor(Color.argb(255, 252, 30, 30));
holder.formatxtlist.setTextColor(Color.argb(255, 252, 30, 30));
holder.avatxtlist.setTextColor(Color.argb(255, 252, 30, 30));
holder.vectxtlist.setTextColor(Color.argb(255, 252, 30, 30));
break;
case "Amarillo":
holder.titxtlist.setTextColor(Color.argb(255, 255, 240, 76));
holder.platxtlist.setTextColor(Color.argb(255, 255, 240, 76));
holder.posetxtlist.setTextColor(Color.argb(255, 255, 240, 76));
holder.formatxtlist.setTextColor(Color.argb(255, 255, 240, 76));
holder.avatxtlist.setTextColor(Color.argb(255, 255, 240, 76));
holder.vectxtlist.setTextColor(Color.argb(255, 255, 240, 76));
break;
case "Verde":
holder.titxtlist.setTextColor(Color.argb(255, 42, 211, 56));
holder.platxtlist.setTextColor(Color.argb(255, 42, 211, 56));
holder.posetxtlist.setTextColor(Color.argb(255, 42, 211, 56));
holder.formatxtlist.setTextColor(Color.argb(255, 42, 211, 56));
holder.avatxtlist.setTextColor(Color.argb(255, 42, 211, 56));
holder.vectxtlist.setTextColor(Color.argb(255, 42, 211, 56));
break;
case "Azul":
holder.titxtlist.setTextColor(Color.argb(255, 32, 232, 225));
holder.platxtlist.setTextColor(Color.argb(255, 32, 232, 225));
holder.posetxtlist.setTextColor(Color.argb(255, 32, 232, 225));
holder.formatxtlist.setTextColor(Color.argb(255, 32, 232, 225));
holder.avatxtlist.setTextColor(Color.argb(255, 32, 232, 225));
holder.vectxtlist.setTextColor(Color.argb(255, 32, 232, 225));
break;
case "Morado":
holder.titxtlist.setTextColor(Color.argb(255, 182, 104, 255));
holder.platxtlist.setTextColor(Color.argb(255, 182, 104, 255));
holder.posetxtlist.setTextColor(Color.argb(255, 182, 104, 255));
holder.formatxtlist.setTextColor(Color.argb(255, 182, 104, 255));
holder.avatxtlist.setTextColor(Color.argb(255, 182, 104, 255));
holder.vectxtlist.setTextColor(Color.argb(255, 182, 104, 255));
break;
case "Blanco":
holder.titxtlist.setTextColor(Color.argb(255, 255, 255, 255));
holder.platxtlist.setTextColor(Color.argb(255, 255, 255, 255));
holder.posetxtlist.setTextColor(Color.argb(255, 255, 255, 255));
holder.formatxtlist.setTextColor(Color.argb(255, 255, 255, 255));
holder.avatxtlist.setTextColor(Color.argb(255, 255, 255, 255));
holder.vectxtlist.setTextColor(Color.argb(255, 255, 255, 255));
break;
case "Negro":
holder.titxtlist.setTextColor(Color.argb(255, 0,0,0));
holder.platxtlist.setTextColor(Color.argb(255, 0,0,0));
holder.posetxtlist.setTextColor(Color.argb(255, 0,0,0));
holder.formatxtlist.setTextColor(Color.argb(255, 0,0,0));
holder.avatxtlist.setTextColor(Color.argb(255, 0,0,0));
holder.vectxtlist.setTextColor(Color.argb(255, 0,0,0));
break;

}

}

就是这样

如果您有任何问题,请确保您没有将颜色引用搞乱(Color.parseColor("#000000") 在这种情况下对我不起作用)

关于java - 如何将 RecyclerView 所有元素的背景更改为 SharedPreferences 保存的颜色?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56482380/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com