获取卡内的TextView

时间:2017-10-09 22:56:57

标签: android adapter onclicklistener

我正在创建一个卡片列表,我希望在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。我认为视图来自一个元素,而不是来自卡片。那我该怎么办?

谢谢

2 个答案:

答案 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;
    }

}