#android #android-recyclerview
#Android #android-recyclerview
Вопрос:
в моем приложении есть recyclerview, и я показываю города в этом recyclerview. Форма каждого элемента округлена, а альфа равна 0,5. Я хочу, чтобы альфа только выбранного элемента была равна 1. Я могу изменить алфавитные обозначения выбранного элемента, но у меня проблема. Я хочу, чтобы первый элемент был выбран сразу после начала действия. Вот мои коды:
public void onBindViewHolder(@NonNull final ViewHolder holder, final int i) {
String name= cityArrayList.get(i).getName();
Character firstLetter=name.charAt(0);
String fL= String.valueOf(firstLetter);
if(name.equals(" ")){
holder.tvHeaderCityName.setText("Add City");
holder.tvLogo.setText(fL);
} else{
holder.tvHeaderCityName.setText(name);
holder.tvLogo.setText(fL);
}
boolean isLastIndex=false;
boolean isFirstIndex=false;
int size= cityArrayList.size();
if(cityArrayList.get(i)==cityArrayList.get(size-1)){
isLastIndex=true;
}
if(cityArrayList.get(i)==cityArrayList.get(0)){
isFirstIndex=true;
}
Log.d("indexilk",String.valueOf(isFirstIndex));
Log.d("indexson",String.valueOf(isLastIndex));
holder.llCity.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
cIndex=i;
cityArrayList.get(0).setChecked(false);
for (int k=0;k<cityArrayList.size();k ){
if(k==i){
cityArrayList.get(k).setChecked(true);
} else {
cityArrayList.get(k).setChecked(false);
}
}
}
});
if (cIndex == i) {
holder.llCity.setAlpha(1f);
holder.tvHeaderCityName.setTypeface(Typeface.DEFAULT_BOLD);
} else {
holder.llCity.setAlpha(0.5f);
holder.tvHeaderCityName.setTypeface(Typeface.DEFAULT);
}
}
Я попробовал несколько вещей, но у меня не получилось, поэтому теперь я предоставил общий доступ к запущенному коду в невыбранном состоянии для всех элементов при открытии действия. Что я должен добавить к этому коду первым выбранным элементом?
Ответ №1:
Я создал образец адаптера RecyclerView. Вы можете использовать свой View вместо TextView и setAlpha() вместо SetTextColor(). Вы должны запустить метод checkedItem (int) в вашем фрагменте, затем notifyDataSetChanged или notifyItemChanged()
/**
* Created by beyazid on 11.03.2019.
*/
public class MyAdapter extends RecyclerView.Adapter<MyAdapter.MyViewHolder> {
private Context context;
private LayoutInflater inflater;
private ArrayList<String> list;
private int indexOfHighlightedItem = -1;
public MyAdapter(Context context, ArrayList<String> list) {
inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
this.context = context;
this.list = list;
}
@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = inflater.inflate(R.layout.my_row_for_recycler_view, parent, false);
return new MyViewHolder(view);
}
@Override
public void onBindViewHolder(final MyViewHolder holder, final int position) {
holder.bindItem(position);
holder.tvDummy.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
indexOfHighlightedItem = position;
notifyDataSetChanged();
}
});
}
@Override
public int getItemCount() {
return list.size();
}
public void checkedItem(int pos){
indexOfHighlightedItem = pos;
}
}
public class MyViewHolder extends RecyclerView.ViewHolder {
TextView tvDummy;
public MyViewHolder(View itemView) {
super(itemView);
tvDummy = itemView.findViewById(R.id.text);
}
void bindItem(int pos) {
String txt = list.get(pos);
tvDummy.setText(txt);
if(indexOfColoredItem==pos){
tvDummy.setTextColor(ContextCompat.getColor(context, R.color.selectedColor));
} else{
tvDummy.setTextColor(ContextCompat.getColor(context, R.color.yourDefaulColor));
}
}
}
}
Вам нужно создать только целое число, чтобы получить выбранную позицию. Нравится
— private int indexOfHighlightedItem = -1;
Комментарии:
1. я могу изменить альфа-значение элемента или цвет с помощью onclick, но я хочу, чтобы первый элемент был выбран или окрашен, или альфа = 1 при запуске действия.
2. Хорошо, вы должны установить индекс 0. Потому что массив начинается с 0. И ваш первый элемент = yourList (0) вот так
private int indexOfHighlightedItem = 0;