Как исправить это странное поведение с помощью Recyclerview и Gridlayoutmanager?Android

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Как исправить это странное поведение с помощью Recyclerview и Gridlayoutmanager?

Сообщение Anonymous »

I have a simple app using RecyclerView with GridLayoutManager.
When the app starts, it looks like this:
Изображение

If I tap on 6, 12, 18 & 24 it looks like Это:
< /p>
Но если я сейчас нажмите на 6, чтобы не выбирать его, это выглядит так:

пункт 5 стал выбран, хотя я не нажимал на него. И 5 теперь не реагирует на постукивание, поэтому я не могу не определить его, но если я теперь нажимаю на 12, 18 и 24, они станут не отобраны, а затем я также могу не поднять 5 снова! Есть ли способ заставить это приложение работать должным образом на Android 5?

Код: Выделить всё

   public class RecyclerViewAdapter extends RecyclerView.Adapter {
public interface ActionListenerCallback {
void onItemClick(View v, int index);
}

private static ActionListenerCallback callback;

public void setClickListener(ActionListenerCallback itemClickListener) {
this.callback = itemClickListener;
}

private String[] mData;
private boolean[] mStates;
private LayoutInflater mInflater;

RecyclerViewAdapter(Context context, String[] data, boolean[] states) {
this.mInflater = LayoutInflater.from(context);
this.mData = data;
this.mStates = states;
}
public void setStates(boolean[] states) {
this.mStates = states;
}

@Override
@NonNull
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = mInflater.inflate(R.layout.grid_cell, parent, false);
return new ViewHolder(view);
}

@Override
public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
holder.myTextView.setText(mData[position]);
if (mStates[position] == true)
holder.itemView.setBackgroundColor(Color.parseColor("#FFB3EBF2"));
}

@Override
public int getItemCount() {
return mData.length;
}

public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
TextView myTextView;

ViewHolder(View itemView) {
super(itemView);
myTextView = itemView.findViewById(R.id.cellText);
itemView.setOnClickListener(this);
}

@Override
public void onClick(View view) {

if (callback != null) callback.onItemClick(view, getAdapterPosition());
}
}

String getItem(int id) {
return mData[id];
}
}
< /code>
Вот основное действие: < /p>
public class MainActivity extends AppCompatActivity {
private AppBarConfiguration appBarConfiguration;
private ActivityMainBinding binding;

RecyclerViewAdapter adapter;
boolean[] stateArray = new boolean[24];
String[] days = {"Monday","Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"};
int day_index;

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

String[] data = {"1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23", "24"};

RecyclerView recyclerView = findViewById(R.id.rvHours);
int numberOfColumns = 6;
recyclerView.setLayoutManager(new GridLayoutManager(this, numberOfColumns));
recyclerView.addItemDecoration(new SpacesItemDecoration(5));
adapter = new RecyclerViewAdapter(this, data, stateArray);
adapter.setClickListener(new RecyclerViewAdapter.ActionListenerCallback() {
@Override
public void onItemClick(View view, int position) {
stateArray[position] = !stateArray[position];
adapter.setStates(stateArray);
adapter.notifyDataSetChanged();
}
});

recyclerView.setAdapter(adapter);

TextView view = (TextView)findViewById(R.id.tvDay);
view.setText(days[0]);
}

public void DayDownClick(View view) {
if (day_index > 0)
day_index--;
TextView v = (TextView)findViewById(R.id.tvDay);
v.setText(days[day_index]);
}

public void DayUpClick(View view) {
if (day_index <  days.length-1)
day_index++;
TextView v = (TextView)findViewById(R.id.tvDay);
v.setText(days[day_index]);
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu_main, menu);
return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();

if (id == R.id.action_settings) {
return true;
}

return super.onOptionsItemSelected(item);
}
}
Спасибо за просмотр!

Подробнее здесь: https://stackoverflow.com/questions/795 ... outmanager
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»