notifyDataSet не применяется к RecyclerView до прокрутки - PullRequest
0 голосов
/ 24 апреля 2020

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

Теперь проблема в том, что когда я выбираю любой элемент SolidColorThemes, выбранный элемент показывает галочку на переднем плане, а затем я выбираю элемент PictureThemes, чем то же самое, снова означает, что отметка появляется на переднем плане выбранного элемента, НО здесь, когда оба элемента recyclerViews показывают отметку TICK. Поэтому я использовал notifyDataSet для обновления sh recyclerViews, но для меня это работает только тогда, когда я прокручиваю recyclerView. Поэтому мне нужно решить эту проблему, и я просто хочу, чтобы при выборе элемента SolidColorThemes отметка должна отображаться только на выбранном элементе SolidColorTheme, а не на элементе PictureThemes, и то же самое при выборе элемента PictureThemes ...

Ниже я попробовал:

public class MainActivity extends AppCompatActivity {
boolean doubleBackToExitPressedOnce = false;
ImageView btnTheme, btnCustom, btnSetting, btnKeyboardPreview;
public static final String THEME_KEY = "theme_key";
public static final String THEME_KEY2 = "theme_key2";
public static boolean SHIFT_FLAG = false;
MyPrefs prefs;

int count=0;


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);


    btnTheme = findViewById(R.id.btn_theme);
    btnCustom = findViewById(R.id.btn_custom);
    btnSetting = findViewById(R.id.btn_setting);
    btnKeyboardPreview = findViewById(R.id.btn_keyboard_preview);

    this.prefs = new MyPrefs(MainActivity.this);
    prefs.setKeySound("balloon_snap.mp3");

    btnTheme.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {

            loadFragment(new ThemesFragment());

        }
    });
    btnCustom.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            loadFragment(new CustomizationFragment());

        }
    });
    btnSetting.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            loadFragment(new SettingFragment());


        }
    });
    btnKeyboardPreview.setOnClickListener(new View.OnClickListener() {
        @SuppressLint("WrongConstant")
        @Override
        public void onClick(View view) {

            if (isInputEnabled()) {
                ((InputMethodManager) MainActivity.this.getSystemService(Context.INPUT_METHOD_SERVICE))
                        .showInputMethodPicker();
            }


        }

});


loadFragment(new ThemesFragment());

}


@Override
public void onBackPressed() {
    if (doubleBackToExitPressedOnce) {
        super.onBackPressed();
        finish();
        return;
    }

    this.doubleBackToExitPressedOnce = true;
    Toast.makeText(this, "Please click BACK again to exit", Toast.LENGTH_SHORT).show();

    new Handler().postDelayed(new Runnable() {

        @Override
        public void run() {
            doubleBackToExitPressedOnce = false;
        }
    }, 2000);
}

private void loadFragment(Fragment fragment) {
    // create a FragmentManager
    FragmentManager fm = getSupportFragmentManager();
    // create a FragmentTransaction to begin the transaction and replace the Fragment
    FragmentTransaction fragmentTransaction = fm.beginTransaction();
    // replace the FrameLayout with new Fragment
    fragmentTransaction.replace(R.id.frameLayout, fragment);
    fragmentTransaction.commit(); // save the changes
}

@SuppressLint("WrongConstant")
public void showKeyboard() {
    ((InputMethodManager) MainActivity.this.getSystemService("input_method")).toggleSoftInput(2, 0);
}

public static void hideKeyboard(AppCompatActivity activity) {

    InputMethodManager imm = (InputMethodManager) activity.getSystemService(AppCompatActivity.INPUT_METHOD_SERVICE);
    //Find the currently focused view, so we can grab the correct window token from it.
    View view = activity.getCurrentFocus();
    //If no view currently has focus, create a new one, just so we can grab a window token from it
    if (view == null) {
        view = new View(activity);
    }
    imm.hideSoftInputFromWindow(view.getWindowToken(), 0);
}

public boolean isInputEnabled() {
    InputMethodManager imm = (InputMethodManager) this.getSystemService(Context.INPUT_METHOD_SERVICE);
    List<InputMethodInfo> mInputMethodProperties = imm.getEnabledInputMethodList();

    final int N = mInputMethodProperties.size();
    boolean isInputEnabled = false;

    for (int i = 0; i < N; i++) {

        InputMethodInfo imi = mInputMethodProperties.get(i);
        Log.d("INPUT ID", String.valueOf(imi.getId()));
        if (imi.getId().contains(this.getPackageName())) {
            isInputEnabled = true;
        }
    }

    if (isInputEnabled) {
        return true;
    } else {
        return false;
    }
}


public static class ImagesThemesAdapter extends RecyclerView.Adapter<ImagesThemesAdapter.MyViewHolder> {

    int selectedPosition = -1;

    private LayoutInflater inflater;
    private ArrayList<ImagesThemesModel> imageModelArrayList;
    Context context;
    public static final String THEME_KEY = "theme_key";
    private SharedPreferences sharedPreferences;
    private SharedPreferences.Editor editor;
    AppCompatActivity act = (AppCompatActivity) context;
    int count = 0;
    SolidThemesAdapter solidThemesAdapter;

    SharedPreferences countPref;

    public ImagesThemesAdapter(Context ctx, ArrayList<ImagesThemesModel> imageModelArrayList) {

        inflater = LayoutInflater.from(ctx);
        this.imageModelArrayList = imageModelArrayList;
        context = ctx;
    }

    @RequiresApi(api = Build.VERSION_CODES.M)
    @Override
    public void onBindViewHolder(MyViewHolder holder, int position) {


        Drawable dr = ContextCompat.getDrawable(context, R.drawable.select1);

        Drawable dr2 = ContextCompat.getDrawable(context, R.drawable.key_trans);

        Picasso.get().load(imageModelArrayList.get(position).getImage_drawable()).into(holder.iv);



    if(selectedPosition==position && setTheme==0) {
        holder.iv.setForeground(dr);

    }
    else {
        holder.iv.setForeground(dr2);
    }



        holder.iv.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                selectedPosition = position;

                if (solidThemesAdapter != null) {
                    solidThemesAdapter.notifyDataSetChanged();
                }

                notifyDataSetChanged();

                SharedPreferences.Editor editor = sharedPreferences.edit();

                switch (position) {
                    case 0:
                        editor.putInt(THEME_KEY, 0).apply();
                        setTheme = 0;
                        break;
                    case 1:
                        editor.putInt(THEME_KEY, 1).apply();

                        setTheme = 0;


                        break;
                    case 2:
                        editor.putInt(THEME_KEY, 2).apply();
                        setTheme = 0;


                        break;
                    case 3:
                        editor.putInt(THEME_KEY, 3).apply();
                        setTheme = 0;

                        break;
                    case 4:
                        editor.putInt(THEME_KEY, 4).apply();
                        setTheme = 0;

                        break;
                    case 5:
                        editor.putInt(THEME_KEY, 5).apply();
                        setTheme = 0;

                        break;
                    case 6:
                        editor.putInt(THEME_KEY, 6).apply();
                        setTheme = 0;

                        break;
                    case 7:
                        editor.putInt(THEME_KEY, 7).apply();
                        setTheme = 0;

                        break;
                    case 8:
                        editor.putInt(THEME_KEY, 8).apply();
                        setTheme = 0;

                        break;
                    case 9:
                        editor.putInt(THEME_KEY, 9).apply();
                        setTheme = 0;

                        break;

                }
                LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                View layout = inflater.inflate(R.layout.custom_toast5, (ViewGroup) view.findViewById(R.id.custom_toast_layout));
                TextView tv = (TextView) layout.findViewById(R.id.txtvw);
                tv.setText("Theme selected");
                Toast toast = new Toast(context);
                toast.setGravity(Gravity.BOTTOM | Gravity.CENTER, 0, 100);
                toast.setDuration(Toast.LENGTH_LONG);
                toast.setView(layout);
                toast.show();

            }
        });
    }

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

    public class MyViewHolder extends RecyclerView.ViewHolder {

        ImageView iv;

        public MyViewHolder(View itemView) {
            super(itemView);

            iv = (ImageView) itemView.findViewById(R.id.iv);

        }

    }


    @Override
    public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {

        View view = inflater.inflate(R.layout.recycler_item, parent, false);
        MyViewHolder holder = new MyViewHolder(view);

        sharedPreferences = PreferenceManager.getDefaultSharedPreferences(context);
        editor = sharedPreferences.edit();

        countPref = context.getSharedPreferences("Counter", Context.MODE_PRIVATE);



        return holder;
    }
}
public static class SolidThemesAdapter extends RecyclerView.Adapter<SolidThemesAdapter.MyViewHolder> {
    int selectedPosition = -1;
    private LayoutInflater inflater;
    private ArrayList<SolidThemesModel> imageModelArrayList;
    Context context;
    private SharedPreferences sharedPreferences2;
    private SharedPreferences.Editor editor2;
    ImagesThemesAdapter imagesThemesAdapter;
    AppCompatActivity act = (AppCompatActivity) context;
    int count = 0;

    public SolidThemesAdapter(Context ctx, ArrayList<SolidThemesModel> imageModelArrayList) {

        inflater = LayoutInflater.from(ctx);
        this.imageModelArrayList = imageModelArrayList;
        context = ctx;
    }

    @Override
    public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {

        View view = inflater.inflate(R.layout.recycler_item2, parent, false);
        MyViewHolder holder = new MyViewHolder(view);

        sharedPreferences2 = PreferenceManager.getDefaultSharedPreferences(context);
        editor2 = sharedPreferences2.edit();


        return holder;
    }

    @RequiresApi(api = Build.VERSION_CODES.M)
    @Override
    public void onBindViewHolder(MyViewHolder holder, int position) {


        Drawable dr = ContextCompat.getDrawable(context, R.drawable.select1);

        Drawable dr2 = ContextCompat.getDrawable(context, R.drawable.key_trans);

        Picasso.get().load(imageModelArrayList.get(position).getImage_drawable()).into(holder.iv);


    if (selectedPosition == position && setTheme==1)
        holder.iv.setForeground(dr);

    else
        holder.iv.setForeground(dr2);


        holder.iv.setImageResource(imageModelArrayList.get(position).getImage_drawable());

        holder.iv.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {


                selectedPosition = position;
                if (imagesThemesAdapter != null) {
                    imagesThemesAdapter.notifyDataSetChanged();
                }
                notifyDataSetChanged();

                SharedPreferences.Editor editor2 = sharedPreferences2.edit();


                switch (position) {
                    case 0:
                        editor2.putInt(THEME_KEY2, 0).apply();
                        setTheme = 1;
                        break;
                    case 1:
                        editor2.putInt(THEME_KEY2, 1).apply();
                        setTheme = 1;
                        break;
                    case 2:
                        editor2.putInt(THEME_KEY2, 2).apply();
                        setTheme = 1;
                        break;
                    case 3:
                        editor2.putInt(THEME_KEY2, 3).apply();
                        setTheme = 1;
                        break;
                    case 4:
                        editor2.putInt(THEME_KEY2, 4).apply();
                        setTheme = 1;
                        break;
                    case 5:
                        editor2.putInt(THEME_KEY2, 5).apply();
                        setTheme = 1;
                        break;
                    case 6:
                        editor2.putInt(THEME_KEY2, 6).apply();
                        setTheme = 1;
                        break;
                    case 7:
                        editor2.putInt(THEME_KEY2, 7).apply();
                        setTheme = 1;
                        break;
                    case 8:
                        editor2.putInt(THEME_KEY2, 8).apply();
                        setTheme = 1;
                        break;
                    case 9:
                        editor2.putInt(THEME_KEY2, 9).apply();
                        setTheme = 1;
                        break;
                    case 10:
                        editor2.putInt(THEME_KEY2, 10).apply();
                        setTheme = 1;
                        break;
                    case 11:
                        editor2.putInt(THEME_KEY2, 11).apply();
                        setTheme = 1;
                        break;
                    case 12:
                        editor2.putInt(THEME_KEY2, 12).apply();
                        setTheme = 1;
                        break;
                    case 13:
                        editor2.putInt(THEME_KEY2, 13).apply();
                        setTheme = 1;
                        break;
                    case 14:
                        editor2.putInt(THEME_KEY2, 14).apply();
                        setTheme = 1;
                        break;
                    case 15:
                        editor2.putInt(THEME_KEY2, 15).apply();
                        setTheme = 1;
                        break;
                    case 16:
                        editor2.putInt(THEME_KEY2, 16).apply();
                        setTheme = 1;
                        break;
                    case 17:
                        editor2.putInt(THEME_KEY2, 17).apply();
                        setTheme = 1;
                        break;


                }
                LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                View layout = inflater.inflate(R.layout.custom_toast5, (ViewGroup) view.findViewById(R.id.custom_toast_layout));
                TextView tv = (TextView) layout.findViewById(R.id.txtvw);
                tv.setText("Theme selected");
                Toast toast = new Toast(context);
                toast.setGravity(Gravity.BOTTOM | Gravity.CENTER, 0, 100);
                toast.setDuration(Toast.LENGTH_LONG);
                toast.setView(layout);
                toast.show();
            }
        });
    }

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

    class MyViewHolder extends RecyclerView.ViewHolder {

        ImageView iv;

        public MyViewHolder(View itemView) {
            super(itemView);

            iv = (ImageView) itemView.findViewById(R.id.iv);
        }


    }

}
}

, и на рисунке показано, что в настоящее время происходит со мной:

В настоящее время происходит это с я

...