更改 ViewHolder 中的 TextView 数组属性
Change TextView Array properties in ViewHolder
我正在尝试更改我插入到 RecyclerView 中的 Textview 数组的属性。我希望负数为红色,正数为绿色。很简单。
声明:public TextView[] mDay= new TextView[100];
初始化:
for(int i=0;i<=99;i++){
mDay[i] = (TextView) v.findViewById(R.id.day_text);
}
在布局中显示:
Public void onBindViewHolder(MyViewHolder holder, final int position) {
//Hier werden die ganzen Daten eingebunden
holder.mCoin.setText(mDataset[position]);
holder.mPrice.setText(mDataset2[position]);
for(int i=0;i<=mDataset4.length-1;i++){
if(mDataset4[i].contains("-"))
{
Log.w("Negativ",mDataset4[i]);
holder.mDay[i].setTextColor(Color.RED);
holder.mDay[i].setText(mDataset4[i]);
}
else {
Log.w("Positiv",mDataset4[i]);
holder.mDay[i].setTextColor(Color.GREEN);
holder.mDay[i].setText(mDataset4[i]);
}
}
只有我数据集中的最后一个数据被插入到 RecyclerView as you can see here。
当我像其他人一样插入我的数据集时,一切都在正确的地方
holder.mDay[position].setText(mDataset2[position]);
Obviously there is no color
谢谢!
编辑:
我的浏览器:
public static class MyViewHolder extends RecyclerView.ViewHolder {
public CardView mCardView;
public TextView mCoin;
public TextView mPrice;
public TextView mDay;
public MyViewHolder(View v) {
super(v);
//Sachen aus dem Layout zuordnen
mCardView = (CardView) v.findViewById(R.id.card_view);
mCoin = (TextView) v.findViewById(R.id.coin_text);
mPrice = (TextView) v.findViewById(R.id.price_text);
mDay = (TextView) v.findViewById(R.id.day_text);
}
}
我的构造器:我有多个数据集,所以我可以将不同的数据加载到不同的 texviews 等等。
public MyAdapter(ArrayList <String> coin,ArrayList <String> cap,ArrayList <String> price,ArrayList <String> day) {
mDataset = coin.toArray(new String[coin.size()]);
mDataset2 = cap.toArray(new String[cap.size()]);
mDataset3 = price.toArray(new String[price.size()]);
mDataset4 = day.toArray(new String[day.size()]);
}
我的 onBindViewHolder 函数:我将我的数据加载到我想要的文本视图中,然后我尝试根据它的负数或正数来更改文本视图颜色
public void onBindViewHolder(MyViewHolder holder, final int position) {
//Hier werden die ganzen Daten eingebunden
holder.mCoin.setText(mDataset[position]);
holder.mPrice.setText(mDataset2[position]);
for(int i=0;i<=mDataset4.length-1;i++){
if(mDataset4[i].contains("-"))
{
Log.w("Negativ",mDataset4[i]);
holder.mDay.setTextColor(Color.RED);
holder.mDay.setText(mDataset4[i]);
}
else {
Log.w("Positiv",mDataset4[position]);
holder.mDay.setTextColor(Color.GREEN);
holder.mDay.setText(mDataset4[position]);
}
}
holder.mCardView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
String currentValue = mDataset[position];
Log.d("CardView", "CardView Clicked: " + currentValue);
}
});
}
您的循环只找到一个 TextView
mDay[i] = (TextView) v.findViewById(R.id.day_text);
每个 i
的 R.id.day_text
必须是唯一的。
编辑
通过您添加的新代码,我对您的工作有了更好的理解。但您似乎对 onBindViewHolder()
中的这一部分感到困惑:
for (int i = 0; i <= mDataset4.length - 1; i++) {
if (mDataset4[i].contains("-")) {
Log.w("Negativ", mDataset4[i]);
holder.mDay.setTextColor(Color.RED);
holder.mDay.setText(mDataset4[i]);
} else {
Log.w("Positiv", mDataset4[position]);
holder.mDay.setTextColor(Color.GREEN);
holder.mDay.setText(mDataset4[position]);
}
}
有几个问题:
holder.mDay
仅引用一个 TextView,但您的循环试图设置四个值。所以前三个值刚好被最后一个值覆盖。
我不确定你想在这里做什么,你想要四个不同的 TextView 来显示所有 mDataset4
吗?然后添加更多 TextView 或行或其他任何内容以按照您想要的方式显示数据。
或者您只想显示mDataset4
中的一个元素?然后简单地调用适当的值并删除整个循环。
else
子句做了 4 次相同的事情。绝对没有任何变化,因为您从不引用 i
.
首先使用 sam 的答案,然后执行以下操作:
您共享的代码不完整,但在了解您要执行的操作后仍然可以像这样解决您的问题:
您只能使用位置,因为它在屏幕上保存当前视图
if(mDataset4[position]<0)
{
Log.w("Negativ",mDataset4[position]);
holder.mDay[position].setTextColor(Color.RED);
holder.mDay[position].setText(mDataset4[position]);
}
else {
Log.w("Positiv",mDataset4[position]);
holder.mDay[position].setTextColor(Color.GREEN);
holder.mDay[position].setText(mDataset4[position]);
}
您不需要创建 TextView
的数组。您的 RecyclerView
已经有了您需要的 TextView
。你只需要访问它。
因为你没有post所有的代码都需要重建你的问题我不得不做一些猜测。
做这样的事情:
public class MyViewHolder extends RecyclerView.ViewHolder {
public TextView mDay;
public TextView mCoin;
public TextView mPrice;
public MyViewHolder(View v){
super(v);
// I am just guessing at the View ids. You need to substitute the right ones
mDay = (TextView) v.findViewById(R.id.day_text);
mCoin = (TextView) v.findViewById(R.id.coin_text);
mPrice = (TextView) v.findViewById(R.id.price_text);
}
}
我不明白你为什么有mDataset、mDataset2和mDataset4??您向 RecyclerView 传递了一个 ArrayList(我假设),其中 class 包含您希望显示的数据。它应该看起来像这样
private ArrayList<MyDataSet> mDataset;
public EventsRecyclerViewDataAdapter(Context context, ArrayList<MyDataSet> data){
this.mContext = context;
this.mDataset = data;
}
@Override
public void onBindViewHolder(final MyViewHolder holder, final int position){
MyDataSet data = mDataset.get(position);
holder.mCoin.setText(data.getCoin());
holder.mPrice.setText(data.getPrice);
String day = data.getDay();
holder.mDay.setText(day);
if(day.contains("-")){
Log.w("Negativ", day);
holder.mDay.setTextColor(Color.RED);
}
else {
Log.w("Positiv", day);
holder.mDay.setTextColor(Color.GREEN);
}
}
现在您需要使用必要的 getter 和 setter 创建您的 MyDataSet
class!
我正在尝试更改我插入到 RecyclerView 中的 Textview 数组的属性。我希望负数为红色,正数为绿色。很简单。
声明:public TextView[] mDay= new TextView[100];
初始化:
for(int i=0;i<=99;i++){
mDay[i] = (TextView) v.findViewById(R.id.day_text);
}
在布局中显示:
Public void onBindViewHolder(MyViewHolder holder, final int position) {
//Hier werden die ganzen Daten eingebunden
holder.mCoin.setText(mDataset[position]);
holder.mPrice.setText(mDataset2[position]);
for(int i=0;i<=mDataset4.length-1;i++){
if(mDataset4[i].contains("-"))
{
Log.w("Negativ",mDataset4[i]);
holder.mDay[i].setTextColor(Color.RED);
holder.mDay[i].setText(mDataset4[i]);
}
else {
Log.w("Positiv",mDataset4[i]);
holder.mDay[i].setTextColor(Color.GREEN);
holder.mDay[i].setText(mDataset4[i]);
}
}
只有我数据集中的最后一个数据被插入到 RecyclerView as you can see here。
当我像其他人一样插入我的数据集时,一切都在正确的地方
holder.mDay[position].setText(mDataset2[position]);
Obviously there is no color
谢谢!
编辑:
我的浏览器:
public static class MyViewHolder extends RecyclerView.ViewHolder {
public CardView mCardView;
public TextView mCoin;
public TextView mPrice;
public TextView mDay;
public MyViewHolder(View v) {
super(v);
//Sachen aus dem Layout zuordnen
mCardView = (CardView) v.findViewById(R.id.card_view);
mCoin = (TextView) v.findViewById(R.id.coin_text);
mPrice = (TextView) v.findViewById(R.id.price_text);
mDay = (TextView) v.findViewById(R.id.day_text);
}
}
我的构造器:我有多个数据集,所以我可以将不同的数据加载到不同的 texviews 等等。
public MyAdapter(ArrayList <String> coin,ArrayList <String> cap,ArrayList <String> price,ArrayList <String> day) {
mDataset = coin.toArray(new String[coin.size()]);
mDataset2 = cap.toArray(new String[cap.size()]);
mDataset3 = price.toArray(new String[price.size()]);
mDataset4 = day.toArray(new String[day.size()]);
}
我的 onBindViewHolder 函数:我将我的数据加载到我想要的文本视图中,然后我尝试根据它的负数或正数来更改文本视图颜色
public void onBindViewHolder(MyViewHolder holder, final int position) {
//Hier werden die ganzen Daten eingebunden
holder.mCoin.setText(mDataset[position]);
holder.mPrice.setText(mDataset2[position]);
for(int i=0;i<=mDataset4.length-1;i++){
if(mDataset4[i].contains("-"))
{
Log.w("Negativ",mDataset4[i]);
holder.mDay.setTextColor(Color.RED);
holder.mDay.setText(mDataset4[i]);
}
else {
Log.w("Positiv",mDataset4[position]);
holder.mDay.setTextColor(Color.GREEN);
holder.mDay.setText(mDataset4[position]);
}
}
holder.mCardView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
String currentValue = mDataset[position];
Log.d("CardView", "CardView Clicked: " + currentValue);
}
});
}
您的循环只找到一个 TextView
mDay[i] = (TextView) v.findViewById(R.id.day_text);
每个 i
的 R.id.day_text
必须是唯一的。
编辑
通过您添加的新代码,我对您的工作有了更好的理解。但您似乎对 onBindViewHolder()
中的这一部分感到困惑:
for (int i = 0; i <= mDataset4.length - 1; i++) {
if (mDataset4[i].contains("-")) {
Log.w("Negativ", mDataset4[i]);
holder.mDay.setTextColor(Color.RED);
holder.mDay.setText(mDataset4[i]);
} else {
Log.w("Positiv", mDataset4[position]);
holder.mDay.setTextColor(Color.GREEN);
holder.mDay.setText(mDataset4[position]);
}
}
有几个问题:
holder.mDay
仅引用一个 TextView,但您的循环试图设置四个值。所以前三个值刚好被最后一个值覆盖。我不确定你想在这里做什么,你想要四个不同的 TextView 来显示所有
mDataset4
吗?然后添加更多 TextView 或行或其他任何内容以按照您想要的方式显示数据。或者您只想显示
mDataset4
中的一个元素?然后简单地调用适当的值并删除整个循环。else
子句做了 4 次相同的事情。绝对没有任何变化,因为您从不引用i
.
首先使用 sam 的答案,然后执行以下操作: 您共享的代码不完整,但在了解您要执行的操作后仍然可以像这样解决您的问题: 您只能使用位置,因为它在屏幕上保存当前视图
if(mDataset4[position]<0)
{
Log.w("Negativ",mDataset4[position]);
holder.mDay[position].setTextColor(Color.RED);
holder.mDay[position].setText(mDataset4[position]);
}
else {
Log.w("Positiv",mDataset4[position]);
holder.mDay[position].setTextColor(Color.GREEN);
holder.mDay[position].setText(mDataset4[position]);
}
您不需要创建 TextView
的数组。您的 RecyclerView
已经有了您需要的 TextView
。你只需要访问它。
因为你没有post所有的代码都需要重建你的问题我不得不做一些猜测。
做这样的事情:
public class MyViewHolder extends RecyclerView.ViewHolder {
public TextView mDay;
public TextView mCoin;
public TextView mPrice;
public MyViewHolder(View v){
super(v);
// I am just guessing at the View ids. You need to substitute the right ones
mDay = (TextView) v.findViewById(R.id.day_text);
mCoin = (TextView) v.findViewById(R.id.coin_text);
mPrice = (TextView) v.findViewById(R.id.price_text);
}
}
我不明白你为什么有mDataset、mDataset2和mDataset4??您向 RecyclerView 传递了一个 ArrayList(我假设),其中 class 包含您希望显示的数据。它应该看起来像这样
private ArrayList<MyDataSet> mDataset;
public EventsRecyclerViewDataAdapter(Context context, ArrayList<MyDataSet> data){
this.mContext = context;
this.mDataset = data;
}
@Override
public void onBindViewHolder(final MyViewHolder holder, final int position){
MyDataSet data = mDataset.get(position);
holder.mCoin.setText(data.getCoin());
holder.mPrice.setText(data.getPrice);
String day = data.getDay();
holder.mDay.setText(day);
if(day.contains("-")){
Log.w("Negativ", day);
holder.mDay.setTextColor(Color.RED);
}
else {
Log.w("Positiv", day);
holder.mDay.setTextColor(Color.GREEN);
}
}
现在您需要使用必要的 getter 和 setter 创建您的 MyDataSet
class!