更改ListView中某行的文本颜色

时间:2016-09-30 04:00:50

标签: android listview

我是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
     }
});

请帮帮我。

4 个答案:

答案 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)

您可以使用BaseAdapterArrayAdapter作为@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;
}

有关如何使用自定义适配器的详细信息,请参阅ThisThis

快乐编码。

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