我想要的是...
单击“主活动”中的按钮时,颜色选择活动将运行,然后单击“回收器”视图中的按钮,主活动中的按钮将更改为“回收器视图”中单击的按钮的颜色。
但是recyler视图工作得很好,但是视图保持器中的onclick不工作。
我找了很长时间。但是我不知道原因。如果你能帮助我,我将非常感激。
颜色选择活动
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);
}
}
你应该改变这一点:
itemView.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View v)
{
...
}
});
对此:
itemView.button.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View v)
{
...
}
});
将您的点击列表放入viewholder
@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))));
holder.button.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();
}
}
});
}
以前,您要求回收器视图项对您的点击侦听器进行响应。但是现在你问了
holder.button.setOnClickListener
因此,单击按钮时,只有您的颜色会改变。
在GitHub的一个简单应用程序项目中,我只有两个自定义Java文件: MainActivity.java包含与蓝牙和UI相关的源代码 DeviceListAdapter.java包含和,用于在中显示蓝牙设备 MainActivity.java包含一个方法,当用户点击中的蓝牙设备时,该方法将被调用: 我的问题: 如何从s方法调用方法? 我一直在两个Java文件之间移动类声明,并尝试将其放入自己的文
问题内容: 主要代号 2.MovieAdapter.java //我可以成功显示除图片以外的所有数据 //图片链接带有“ posterpath”键 //告诉我如何在MovieAdapter的Viewholder中加载图像 // currentmovie只是一个getter和setter类 3.当前电影 问题答案: 我正在使用该库并通过以下方式加载图像 首先通过创建显示选项对象 然后通过以下方式初始
问题内容: 这是我的ArrayAdapter。我想通过遵循ViewHolder模式来提高效率: http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/view/List14.html 但不确定如何做到这一点。 更新:ViewHolder模式 问题答案: ViewHolder本质上是一
我有一个实现自定义listview的简单代码段。 我的代码如下: 天气适配器。爪哇语: WeatherHolder.java: 我在so和其他网站上看到了这么多答案,我明白了listview的回收机制。 我还了解到,从 viewholder 那里,我们可以将子视图保存在适配器中,而不必多次调用 因此,这是为了优化。 但是我只有和 和< code>getTag在“这里”做什么?
在ViewHolder模式中将ViewHolder作为静态对性能至关重要吗? ViewHolder对象将每个组件视图存储在布局的标签字段中,因此您可以立即访问它们,而不需要重复查找它们。首先,您需要创建一个类来保存您准确的视图集。例如:
问题内容: 我正在尝试在我的Android应用中实现ViewHolder,但是我一直在获取ViewHolder不能解析为一种类型,而没有任何导入建议。有人知道如何解决这个问题吗? 问题答案: 这是因为a 不是 来自 Android SDK 的类,而是您自己创建的。根据我的发现,a 是一种存储视图(通常为ListView中的每行)用于较大区域的实现,因此它是一种帮助程序类和缓存机制。这是我在Andr