То, что я хотел, было ...
Когда нажмите кнопку в основном действии, запустится действие выбора цвета, а затем нажмите кнопку в представлении ресайклера, кнопка в основном действии изменится на цвет кнопки, нажатой в представлении ресайклера.
Но вид ресайлера работает хорошо, но OnCilck внутри держателя представления не работает.
Я искал очень долго. Но я не знаю причины. Я был бы очень благодарен, если бы вы мне помогли.
Действие по выбору цвета
adapter = new Adapter(this, itemList, ColorSelectionActivity.this);
listview.setAdapter(adapter);
Основное действие
public void onColorButtonClick(View v)
{
Intent intent = new Intent(getApplicationContext(), ColorSelectionActivity.class);
startActivityForResult(intent, GET_COLOR_REQUEST);
}
protected void onActivityResult(int requestCode, int resultCode, Intent intent, View v)
{
super.onActivityResult(requestCode, resultCode, intent);
if(requestCode == GET_COLOR_REQUEST)
{
if(resultCode == RESULT_OK)
{
GradientDrawable bgShape = (GradientDrawable) v.getBackground();
bgShape.setColor(Color.parseColor(intent.getStringExtra("name")));
}
}
}
Адаптер
public class Adapter extends RecyclerView.Adapter<Adapter.ViewHolder>
{
private ArrayList<String> itemList;
private Context context;
private Activity colorSelectionActivity;
public Adapter(Context context, ArrayList<String> itemList, ColorSelectionActivity colorSelectionActivity)
{
this.context = context;
this.itemList = itemList;
this.colorSelectionActivity = colorSelectionActivity;
}
private Map<String, String> ColorMap()
{
Map<String, String> colorMap = new HashMap<>();
colorMap.put("Anger", "#ff4343");
colorMap.put("Confusion", "#ff8e43");
colorMap.put("Exciting", "#ffff4f");
colorMap.put("Normal", "#85e070");
colorMap.put("Joy", "#ffa8ab");
colorMap.put("Sad", "#80a9e0");
colorMap.put("Tired", "#6662bf");
colorMap.put("Melancholy", "#bd72db");
return colorMap;
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType)
{
View view = LayoutInflater.from(context).inflate(R.layout.color_item, parent, false);
return new ViewHolder(view);
}
@Override
public void onBindViewHolder(ViewHolder holder, int position)
{
String item = itemList.get(position);
holder.textview.setText(item);
holder.textview.setTag(item);
GradientDrawable bgShape = (GradientDrawable) holder.button.getBackground();
if (ColorMap().containsKey(itemList.get(position)))
bgShape.setColor(Color.parseColor(ColorMap().get(itemList.get(position))));
}
@Override
public int getItemCount()
{
return itemList.size();
}
public class ViewHolder extends RecyclerView.ViewHolder
{
public TextView textview;
public Button button;
public ViewHolder(View itemView)
{
super(itemView);
itemView.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View v) //I've been debugging, this part does not work and just through.
{
int pos = getAdapterPosition();
if (pos != RecyclerView.NO_POSITION)
{
Intent intent = new Intent();
intent.putExtra("name", ColorMap().get(itemList.get((pos))));
colorSelectionActivity.setResult(Activity.RESULT_OK, intent);
notifyItemChanged(pos);
colorSelectionActivity.finish();
}
}
});
textview = itemView.findViewById(R.id.item_text);
button = itemView.findViewById(R.id.item_button);
}
}