2

一直在这个网站上搜索任何答案,我没有找到真正简单的解决方案。我正在创建一个使用 sqlite 数据库通过键入的颜色名称查找十六进制值的 Android 应用程序。我正在动态创建一个 TextView,设置其文本和文本颜色,然后将其添加到 ArrayList,然后 ArrayList 正在添加到列表视图。文本显示在 ListView 中,但未设置其颜色属性。我真的很想找到一种方法来为每个列表视图项设置文本颜色。到目前为止,这是我的代码:

类变量:

    private ListView lsvHexList;

private ArrayList<String> hexList;
private ArrayAdapter adp;

在 onCreate() 中:

    @Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.color2hex);

    lsvHexList = (ListView) findViewById(R.id.lsvHexList);

    hexList = new ArrayList<String>();

在我的按钮处理程序中:

    public void btnGetHexValueHandler(View view) {

    // Open a connection to the database
    db.openDatabase();

    // Setup a string for the color name
    String colorNameText = editTextColorName.getText().toString();

    // Get all records
    Cursor c = db.getAllColors();

    c.moveToFirst(); // move to the first position of the results 

    // Cursor 'c' now contains all the hex values
    while(c.isAfterLast() == false) {

        // Check database if color name matches any records
        if(c.getString(1).contains(colorNameText)) {

            // Convert hex value to string
            String hexValue = c.getString(0);
            String colorName = c.getString(1);

            // Create a new textview for the hex value
            TextView tv = new TextView(this);
            tv.setId((int) System.currentTimeMillis());
            tv.setText(hexValue + " - " + colorName);
            tv.setTextColor(Color.parseColor(hexValue));

            hexList.add((String) tv.getText());

        } // end if

        // Move to the next result
        c.moveToNext();

    } // End while  

    adp = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, hexList);
    lsvHexList.setAdapter(adp);


    db.close(); // close the connection
    }
4

1 回答 1

3

您根本没有将创建的 TextView 添加到列表中,您只需将 String 添加到列表中,因此您在 TextView 上调用的方法无关紧要:

     if(c.getString(1).contains(colorNameText)) {
        // ...
        TextView tv = new TextView(this);
        tv.setId((int) System.currentTimeMillis());
        tv.setText(hexValue + " - " + colorName);
        tv.setTextColor(Color.parseColor(hexValue));

        hexList.add((String) tv.getText()); // apend only the text to the list
        // !!!!!!!!!!!!!!  lost the TextView  !!!!!!!!!!!!!!!!
    } 

您需要做的是将颜色存储在另一个数组中,并在创建实际列表视图时,根据列表中的适当值设置每个 TextView 的颜色。

为此,您需要在其中扩展ArrayAdapter和添加 TextView 颜色的逻辑。

于 2012-05-08T14:40:18.813 回答