Как изменить фон во всех элементах RecyclerView на сохраненный цвет SharedPreferences? - PullRequest
0 голосов
/ 06 июня 2019

У меня есть PreferenceScreen, когда я сохраняю некоторые параметры, и я хочу использовать эти параметры, чтобы изменить визуальный вид всех элементов моего переработчика, расположенных в другом месте приложения.

Я не знаю, как или где поместить значения, чтобы установить эти предпочтения при создании элементов.

Все элементы Recycler состоят из горизонтальной линейной компоновки с некоторым Textview; и я хочу изменить цвет фона макета и цвет текста textview (со значениями предпочтений)

Я пытался восстановить и передать эти данные из представления, где расположен RecyclerView, но я не знаю, как сделать это в адаптере вместо этого

Это код адаптера

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" изменить цвет фона, это было бы идеально

1 Ответ

0 голосов
/ 06 июня 2019

Хорошо, я исправил это

В классе 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") в данном случае не сработало)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...