java - 通过 'if (position == x)' 方法更改 ListView 项目的文本颜色

标签 java android android-layout android-intent android-activity

是否可以使用“if 位置”方法以编程方式将 ListView 项的文本颜色更改为十六进制颜色?下面是我当前用于主要 Activity 的代码,此处的 if 位置用于导航到其他 Activity ,因此我想知道我的代码中需要根据需要添加或修改哪些内容。另外,如果我将应用程序的主题设置为 Holo Dark,它是否总是这样说,并且购买我的应用程序的人不可能篡改应用程序的主题?

public class MainActivity extends Activity {

ListView mainList;

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

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    mainList = (ListView)findViewById(R.id.main_listView);
    ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,listContent);
    mainList.setAdapter(adapter);

    mainList.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> adapterView, View view, int position, long id) {
            //When clicked, go to specific activity
            if(position == 0) {
                //code specific to first list item
                Intent myIntent = new Intent(view.getContext(), Line1Activity.class);
                startActivityForResult(myIntent, 0);
            }
            if(position == 1) {
                //code specific to second list item
                Intent myIntent = new Intent(view.getContext(), Line1Activity.class);
                startActivityForResult(myIntent, 0);
            }
    });
}

最佳答案

我将使用自定义的ArrayAdapter,它根据getView中的位置设置颜色 类似的东西

MainActivity.java

public class MainActivity extends Activity {

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

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

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

    mainList.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> adapterView, View view, int position, long id) {
            //When clicked, go to specific activity
            Toast.makeText(getApplicationContext(),"Clicked on list item "+position,Toast.LENGTH_SHORT).show();
            switch (position) {
                case 0:
                    //code specific to first list item
                    break;
                case 1:
                    //code specific to second list item
                    break;
            }
        }
    });
}

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_textview);
        // Set text
        textView.setText(values[position]);
        // Set color depending on position
        int textColorId = R.color.black; // Default color
        switch (position%2) {
            case 0:
                // Even places
                textColorId = R.color.red; break;
            case 1:
                // Odd places
                textColorId = R.color.green; break;
        }
        textView.setTextColor(getResources().getColor(textColorId));
        return rowView;
    }
}
}

list_item.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:textAppearance="?android:attr/textAppearanceLarge"
    android:id="@+id/list_textview" />
</LinearLayout>

colors.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <color name="red">#ff0000</color>
    <color name="green">#00ff00</color>
    <color name="black">#000000</color>
</resources>

关于java - 通过 'if (position == x)' 方法更改 ListView 项目的文本颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25796003/

相关文章:

java - weblogic.ejbc 编译器已弃用 : EJB Application deployment in WebLogic 12c

java - 如何获取未知json对象结构的Json键值

php - Android App无法访问Vagrant Homestead托管的Web API

java - 如何为不同的内容使用不同的卡片布局?

java - Android - 在视频上创建圆形蒙版

用于跟踪部分聚合值的 Java 算法

java - Java 中的 IoT 模块 GET 请求

java.util.hashmap$values 无法在 android putExtra 方法中转换为 java.io.serialized

android - original-package AndroidManifest 属性是做什么用的?

android - 在 Constraint Layout 中对多个 View 进行分组以仅设置一个点击监听器