我是android和java的新手。我想在ListView红色中制作第3行(不是每隔三行)的文本。
ArrayList<String> weekInfoList = new ArrayList<>();
weekInfoList.add("first row");
weekInfoList.add("second row");
weekInfoList.add("third row");
ArrayAdapter arrayAdapter1 = new ArrayAdapter(MainActivity.this, R.layout.list_item2, weekInfoList);
weeklyListView.setAdapter(arrayAdapter1);
weeklyListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> a, View v, int position, long id) {
// intent to next activity
}
});
请帮帮我。
答案 0 :(得分:1)
您可以创建自己的自定义ArrayAdapter
,而不是使用默认值,然后覆盖getView方法根据行位置设置颜色。
public class CustomAdapter extends ArrayAdapter {
public CustomAdapter(Context context, int resource) {
super(context, resource);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// check position
// if every 3rd row, set color
// return the modified convertView
}
}
答案 1 :(得分:1)
您可以使用BaseAdapter
或ArrayAdapter
作为@ginomempin建议。并覆盖它的getView
方法。
现在正如您所提到的,您想要更改文字颜色的第3行,您可以执行以下操作。
@Override
public View getView(int position, View convertView, ViewGroup parent) {
LayoutInflater inf = (LayoutInflater) parent.getContext()
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
final Holder vh;
if (itemLayoutView == null) {
vh = new Holder();
itemLayoutView = inf.inflate(R.layout.custom_layout,
null);
vh.textview = (TextView) itemLayoutView
.findViewById(R.id.textview);
temLayoutView.setTag(vh);
} else {
vh = (Holder) itemLayoutView.getTag();
}
if(position%3==0){
holder.textview.setTextColor(Color.parseColor("#ff0000"));
}else{
holder.textview.setTextColor(Color.parseColor("#666666"));
}
return convertView;
}
有关如何使用自定义适配器的详细信息,请参阅This和This
快乐编码。
答案 2 :(得分:0)
在您的适配器类中,您可能需要显示多个项目,因此如果您使用的是android.support.v4
,那么
holder.thirdTextview.setTextColor(ContextCompat.getColor(activity, R.color.red));
答案 3 :(得分:0)
由于我是编程新手,我试图避免自定义适配器,但似乎我们必须使用它。
备选答案非常简短。所以在这里我附上我的解决方案以获得更多细节参考。
ArrayAdapter customAdapter = new MySimpleArrayAdapter(getApplicationContext(),weekInfoList);
weeklyListView.setAdapter(customAdapter);
public class MySimpleArrayAdapter extends ArrayAdapter {
private final Context context;
private final ArrayList<String> values;
public MySimpleArrayAdapter(Context context, ArrayList<String> values) {
super(context, -1, values);
this.context = context;
this.values = values;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
LayoutInflater inflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View rowView = inflater.inflate(R.layout.list_item2, parent, false);
TextView textView = (TextView) rowView.findViewById(R.id.weeknumber2);
textView.setText(values.get(position));
if (position==2){
textView.setTextColor(Color.RED);
}
return rowView;
}
}
感谢Suraj的解决方案https://stackoverflow.com/a/13109854/2466516。