У меня есть приложение для клавиатуры, и я использую 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);
}
}
}
}
, и на рисунке показано, что в настоящее время происходит со мной:
В настоящее время происходит это с я