解決方法1:
あなたはviewbinder
に列インデックスをチェックする必要があります:
public boolean setViewValue(View view, Cursor cursor, int columnIndex) {
if (columnIndex == cursor.getColumnIndexOrThrow(**??**)) // 0 , 1 , 2 ??
{
sign = (TextView) view;
SharedPreferences currency = PreferenceManager.getDefaultSharedPreferences(getBaseContext());
String currency1 = currency.getString("Currency", "$");
sign.setText(currency1);
return true;
}
return false;
}
注意、列インデックスは、通貨のDBcolumnインデックス/内の列のインデックスですあなたのデータソースは何でも。
解決方法2:
おそらく、例えば、あなたのlistview
中にバインドするフィールドのint[]
を定義している:
// and an array of the fields we want to bind those fields to
int[] to = new int[] { R.id.field1, R.id.field2, R.id.Currency };
SimpleCursorAdapter entries = new SimpleCursorAdapter(this, R.layout.row, cursor, from, to);
...条件付き、あなたは単に0
の代わりに渡すことができますバインドする/表示する必要のないフィールドのレイアウトID。
int[] to = new int[] { 0, 0, R.id.Currency };
このように、通貨フィールドのみがバインドされます。また
が、その理由は、あなたは、技術的には、何もあなたの
contentViewにおける単一
text65
多く
がないので近い
力が得られます。メインレイアウトレベルからアクセスすることはできません。これは、単一行の範囲内でのみユニークです。
更新:
解決策3:
ViewBinder
public boolean setViewValue(View view, Cursor cursor, int columnIndex) {
int viewId = view.getId();
Log.v("ViewBinder", "columnIndex=" + columnIndex + " viewId = " + viewId);
if(viewId == R.id.text65)
{
sign = (TextView) view;
SharedPreferences currency = PreferenceManager.getDefaultSharedPreferences(getBaseContext());
String currency1 = currency.getString("Currency", "$");
sign.setText(currency1);
return true;
}
return false;
}
のビューのid
は、あなたがこれを試みることができるチェック!
ヒント:Log.v
を使用すると、コード内の特定の値をデバッグすることなくチェックできます。
希望します。
これは非常に素晴らしい情報ですが、状況についてもう少し詳しく説明してくれてありがとうございます。私のリストビューでは、各行に日付、経費、および設定で変更可能なその費用を含む通貨記号が含まれています。 (例:[6月19日$ 102.32])。私の通貨記号が私のデータベースに置かれていれば、これらの解決策はうまくいくでしょうが、すべての行に複写したいsharedpreferencesにある単なる単純な値です。もう一度お時間をいただきありがとうございます。 – 725623452362
何が起きているのですか?リストビューの行は、テキストビューの3つすべてを変更するため、[$ $ $]として表示されます。あなたがこれのための解決策を持っているなら、私は感謝するでしょう! – 725623452362
うーん..あなたは最初のソリューションを使用することができるはずです。 'cursor.getColumnIndexOrThrow(...)'のisnteadは、ハードコードされた値(0,1,2)を試し、通貨列を取得できるかどうかを調べる簡単なテストを行います。 –