2

答えを求めてこのサイトを精査してきましたが、私が見つけた本当に簡単な解決策はありません。sqlite データベースを使用して、入力された色の名前で 16 進値を検索する Android アプリケーションを作成しています。TextView を動的に作成し、そのテキストとテキストの色を設定してから、それを ArrayList に追加すると、ArrayList が実行されます。 ListView に追加されました。テキストは 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 をリストに追加するのではなく、文字列をリストに追加するだけなので、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 に答える