我正在尝试更改我插入到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]);
谢谢!
修改
Myviewholder:
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);
}
}
我的Consturcutor:我有多个数据集,所以我可以将不同的数据加载到不同的texview等等。
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功能:我将数据加载到我想要的文本视图中,之后我尝试根据其负面或正面更改Textview颜色
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);
}
});
}
答案 0 :(得分:1)
你的循环只找到一个TextView
mDay[i] = (TextView) v.findViewById(R.id.day_text);
每个R.id.day_text
i
必须是唯一的。
修改强>
使用您添加的新代码,我可以更好地了解您正在做的事情。但是你仍然对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
。
答案 1 :(得分:1)
您无需创建TextView
的数组。您的RecyclerView
已经拥有您需要的TextView
。你只需要访问它。
由于你没有发布需要重建问题的所有代码,我不得不做一些猜测。
做这样的事情:
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(我假设)。它应该看起来像这样
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
课程。
答案 2 :(得分:0)
首先使用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]);
}