java - ListView 项目文本不改变颜色

标签 java android xml android-fragments android-activity

我正在尝试使用自定义适配器更改列表项的文本颜色,以便它们每个都有自己的颜色,但我收到一个错误,我不知道如何修复。如何解决这个错误?

enter image description here

import android.content.Context;
import android.graphics.Color;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.TextView;

public class FragmentLineChooserList extends android.support.v4.app.Fragment {

    ListView list_linechooser;

    String[] listContent = {
            "Line 1",
            "Line 2",
            "Line 3"
    };

    private boolean mTwoPane;

    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){
        View v = inflater.inflate(R.layout.fragment_line_chooser_list, container, false);

        list_linechooser = (ListView)v.findViewById(R.id.list_linechooser);
        MyColoringAdapter adapter = new MyColoringAdapter(this,listContent);
        list_linechooser.setAdapter(adapter);

        return v;
    }

    private class MyColoringAdapter extends ArrayAdapter<String> {
        private final Context context;
        private final String[] values;

        public MyColoringAdapter(Context context, String[] values) {
            super(context, R.layout.list_item, 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_item, parent, false);
            TextView textView = (TextView) rowView.findViewById(R.id.list_item);
            textView.setText(values[position]);
            int textColorId = R.color.white;
            switch (position) {
                case 0:
                    textColorId = R.color.green; break;
                case 1:
                    textColorId = R.color.orange; break;
                case 2:
                    textColorId = R.color.blue; break;
            }
            textView.setTextColor(getResources().getColor(textColorId));
            return rowView;
        }
    }
}

最佳答案

MyColoringAdapter 构造函数的第一个参数是 Context。一个Fragment不是Context ,因此您无法像在 Fragment 中尝试那样将 this 传递到构造函数中。

您可以通过调用getActivity()来获取Fragment的Activity(这是一个Context)。

关于java - ListView 项目文本不改变颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30626194/

相关文章:

java - EditText 中提示的文本颜色不起作用

java - rxJava 和 promises 的关系

java - Eclipse 在获取 session 代码时暂停且没有断点

java - 使用 SQLite 进行简单的数学计算 - Android

应用程序启动时的 Android 事件处理程序

java - 更改请求的 Content-Type 以处理使用 application/x-www-form-urlencoded 发送的 XML

php - xml 错误 xsl 样式表

java - 等待进程执行结束

java - android 调用公共(public)方法并获得成功反馈

java - Android - ViewFlipper 问题