从自身更改 CardView 内的 TextView 中的文本
Changing text in TextView inside CardView from itself
想象一下带有按钮和文本字段的 CardView。当我按下按钮时,文本字段中的文本应该会发生变化。下面给出了我的 recyclerView 的代码,我在其中设置按钮的文本和侦听器:
@Override
public void onBindViewHolder(CategoriesDetailedViewHolder holder, int position) {
final CategoryDetailedModel model = categoriesDetailedModels.get(position);
holder.description.setText(model.getQuestion());
holder.btnPlus.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
holder.description.setText("some text");
}
});
}
主要问题在于字符串:
holder.description.setText("some text");
无法从内部 class 访问它。
有谁知道如何更改卡片视图中的文本吗?
更新 1
public class CategoriesDetailedViewHolder extends RecyclerView.ViewHolder{
CardView cv;
TextView description;
TextView positiveCounter;
TextView negativeCounter;
TextView btnPlus;
View negativeCounterWrapper;
View positiveCounterWrapper;
CategoriesDetailedViewHolder(View itemView) {
super(itemView);
cv = (CardView)itemView.findViewById(R.id.cv);
description = (TextView)itemView.findViewById(R.id.main_text);
positiveCounter = (TextView)itemView.findViewById(R.id.tv_positive_count_in_circle);
negativeCounter = (TextView)itemView.findViewById(R.id.tv_negative_count_in_circle);
btnPlus = (TextView)itemView.findViewById(R.id.plus_button);
positiveCounterWrapper = itemView.findViewById(R.id.positive_count_wrapper);
negativeCounterWrapper = itemView.findViewById(R.id.negative_count_wrapper);
cv.setPreventCornerOverlap(false);
}
}
@Override
public CategoriesDetailedViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.categories_detailed_list_row_view, parent, false);
CategoriesDetailedViewHolder pvh = new CategoriesDetailedViewHolder(v);
context = parent.getContext();
return pvh;
}
而不是,
TextView description;
成功,
public TextView description;
编辑:
更改以下内容,
@Override
public void onBindViewHolder(CategoriesDetailedViewHolder holder, int position) { ... }
到,
@Override
public void onBindViewHolder( final CategoriesDetailedViewHolder holder, int position) { .... }
我使用这段代码,它工作正常,你只需要使用 onBind 方法。
这是一个示例,我在我的项目中使用了它,您可以根据自己的需要对其进行更改:
public void onBindViewHolder(final TipsViewHolder TipsViewHolder, final int i) {
TipsViewHolder.cardText.setText("Old text");
TipsViewHolder.txtBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
TipsViewHolder.cardText.setText("New Text");
}
});
}
想象一下带有按钮和文本字段的 CardView。当我按下按钮时,文本字段中的文本应该会发生变化。下面给出了我的 recyclerView 的代码,我在其中设置按钮的文本和侦听器:
@Override
public void onBindViewHolder(CategoriesDetailedViewHolder holder, int position) {
final CategoryDetailedModel model = categoriesDetailedModels.get(position);
holder.description.setText(model.getQuestion());
holder.btnPlus.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
holder.description.setText("some text");
}
});
}
主要问题在于字符串:
holder.description.setText("some text");
无法从内部 class 访问它。 有谁知道如何更改卡片视图中的文本吗?
更新 1
public class CategoriesDetailedViewHolder extends RecyclerView.ViewHolder{
CardView cv;
TextView description;
TextView positiveCounter;
TextView negativeCounter;
TextView btnPlus;
View negativeCounterWrapper;
View positiveCounterWrapper;
CategoriesDetailedViewHolder(View itemView) {
super(itemView);
cv = (CardView)itemView.findViewById(R.id.cv);
description = (TextView)itemView.findViewById(R.id.main_text);
positiveCounter = (TextView)itemView.findViewById(R.id.tv_positive_count_in_circle);
negativeCounter = (TextView)itemView.findViewById(R.id.tv_negative_count_in_circle);
btnPlus = (TextView)itemView.findViewById(R.id.plus_button);
positiveCounterWrapper = itemView.findViewById(R.id.positive_count_wrapper);
negativeCounterWrapper = itemView.findViewById(R.id.negative_count_wrapper);
cv.setPreventCornerOverlap(false);
}
}
@Override
public CategoriesDetailedViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.categories_detailed_list_row_view, parent, false);
CategoriesDetailedViewHolder pvh = new CategoriesDetailedViewHolder(v);
context = parent.getContext();
return pvh;
}
而不是,
TextView description;
成功,
public TextView description;
编辑: 更改以下内容,
@Override
public void onBindViewHolder(CategoriesDetailedViewHolder holder, int position) { ... }
到,
@Override
public void onBindViewHolder( final CategoriesDetailedViewHolder holder, int position) { .... }
我使用这段代码,它工作正常,你只需要使用 onBind 方法。 这是一个示例,我在我的项目中使用了它,您可以根据自己的需要对其进行更改:
public void onBindViewHolder(final TipsViewHolder TipsViewHolder, final int i) {
TipsViewHolder.cardText.setText("Old text");
TipsViewHolder.txtBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
TipsViewHolder.cardText.setText("New Text");
}
});
}