我正在创建一个卡片列表,我希望在TextView中获取所点击的卡片中的文本。
在我的适配器中,我有这个:
public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener, View.OnLongClickListener {
ImageView productImage;
TextView productName;
TextView productPrice;
TextView productBest;
TextView productURL;
ImageView symbol;
private ViewHolder(View v) {
super(v);
productImage = (ImageView) v.findViewById(R.id.productImage);
productName = (TextView) v.findViewById(R.id.productName);
productPrice = (TextView) v.findViewById(R.id.productPrice);
productBest = (TextView) v.findViewById(R.id.productBest);
productURL = (TextView) v.findViewById(R.id.productURL);
symbol = (ImageView) v.findViewById(R.id.symbol);
v.setOnClickListener(this);
v.setOnLongClickListener(this);
}
@Override
public void onClick(View view) {
TextView urlView = (TextView) view.findViewById(R.id.product_url);
String url = urlView.getText().toString();
Intent intent = new Intent(Intent.ACTION_VIEW,Uri.parse(url));
view.getContext().startActivity(intent);
}
@Override
public boolean onLongClick(View view) {
Toast.makeText(view.getContext(), "Long Click",Toast.LENGTH_SHORT).show();
return false;
}
}
但是在 onClick()中,urlView变为null。我认为视图来自一个元素,而不是来自卡片。那我该怎么办?
谢谢
答案 0 :(得分:0)
您使用view参数执行findViewById。
view参数是被点击的视图,因此它不一定是视图容器。
您已经执行了findViewById,您不再需要这样做了。
您的更正代码是:
@Override
public void onClick(View view) {
String url = productURL.getText().toString();
Intent intent = new Intent(Intent.ACTION_VIEW,Uri.parse(url));
view.getContext().startActivity(intent);
}
答案 1 :(得分:0)
在您的代码中尝试此操作。
public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener, View.OnLongClickListener {
ImageView productImage;
TextView productName;
TextView productPrice;
TextView productBest;
TextView productURL;
ImageView symbol;
// edited here
TextView urlView;
private ViewHolder(View v) {
super(v);
productImage = (ImageView) v.findViewById(R.id.productImage);
productName = (TextView) v.findViewById(R.id.productName);
productPrice = (TextView) v.findViewById(R.id.productPrice);
productBest = (TextView) v.findViewById(R.id.productBest);
productURL = (TextView) v.findViewById(R.id.productURL);
symbol = (ImageView) v.findViewById(R.id.symbol);
// edited here ,add findViewById here
urlView = (TextView) view.findViewById(R.id.product_url);
v.setOnClickListener(this);
v.setOnLongClickListener(this);
}
@Override
public void onClick(View view) {
// remove findViewById here
String url = urlView.getText().toString();
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
view.getContext().startActivity(intent);
}
@Override
public boolean onLongClick(View view) {
Toast.makeText(view.getContext(), "Long Click",Toast.LENGTH_SHORT).show();
return false;
}
}