2016-07-11 7 views
1

私は描画可能なフォルダとstring.xmlをからスピナーまたはフラグアイコンおよび通貨名のリストビュー(私はsqliteの中で自分のR IDを保存し、例えばR.drawable.aedR.string.aedを持っています)正しい方法は、sqliteの文字列とDrawableリソースを保存するには?

その後、私は新しい描画可能に挿入し、

私の旗のアイコンシフトをcxx.png例えば、それらのいくつかは、他の画像ではなく、旗のアイコンを変更します。これは私の携帯電話でアプリを更新する場合に発生します。私はそれをインストールするか、または削除し、すべての作業を正常にインストールします。

私のプログラム内のsqliteは、のRのIDを理解しています。 drawableまたは文字列を追加または削除すると、RはID番号が変更されますが、私のsqliteテーブルには古い番号R IDが保存されます。

毎回DB_VERSIONを増やして、新しい文字列とドロワーブルを追加または削除するたびに、すべて IDをsqliteに更新するメソッドを作成しようとすることができます。 より簡単なソリューションはありますか?

これは私のアダプタのいずれかです。string.xmlを使用から文字列を保存するための

public class SpinnerCursorAdapter extends CursorAdapter { 

public SpinnerCursorAdapter(Context context, Cursor cursor) { 
    super(context, cursor, 0); 
} 

@Override 
public View newView(Context context, Cursor cursor, ViewGroup parent) { 
    View view = LayoutInflater.from(context).inflate(R.layout.spinner_item, parent, false); 
    ViewHolder viewHolder = new ViewHolder(view); 
    view.setTag(viewHolder); 
    return view; 
} 

@Override 
public void bindView(View view, Context context, Cursor cursor) { 
    ViewHolder viewHolder = (ViewHolder) view.getTag(); 

    int flagIconId = Integer.valueOf(cursor.getString(5)); 
    viewHolder.flagIcon.setImageResource(flagIconId); 

    String currencyName = cursor.getString(4); 
    viewHolder.currencyName.setText(currencyName); 

    viewHolder.currencyCharCode.setText(cursor.getString(1)); 
} 

private static class ViewHolder { 
    final ImageView flagIcon; 
    final TextView currencyName; 
    final TextView currencyCharCode; 

    private ViewHolder(View view) { 
     flagIcon = (ImageView) view.findViewById(R.id.spinner_flag_icon); 
     currencyName = (TextView) view.findViewById(R.id.spinner_currency_name); 
     currencyCharCode = (TextView) view.findViewById(R.id.spinner_currency_char_code); 
    } 
} 

}

+0

はい、あなたは間違いありません。 – Amy

答えて

0

私は文字列とDrawableのリソースを節約するための柔軟なソリューションを見つける:例えば
を私はblabla.pngを持っており、それは、私は文字列を保存R.drawable.blabla、 識別子ですblabla in sqlite。私はR.drawable.classを使用Drawable.class
https://stackoverflow.com/a/4428288/318460
代わりの:私のCursorAdapterで
は、私はこれを使用してblablaの現在の識別子を取ります。

文字列リソースと同じです。

利益 - string.xmlの文字列をsqliteテーブルを更新せずに変更することができます。

0

context.getResources().getString(R.string.value); 

とDrawableのIDの使用を節約するために:

String.valueOf(R.drawable.aed) 

だからクエリは次のようになります。

insertCurrency(db, CharCode.AED, 0, 1, 1, 0, 3.672950, 3.672950, context.getResources().getString(R.string.aed),String.valueOf(R.drawable.aed), 0, 1, 1); 
+0

私はこの解決策を試してみます。 String - value.valueOf(R.drawable.aed)とInteger - R.drawable.aedだけを保存する場合の違いは何ですか?私はそれが問題を解決しないことが怖いです - 私はdrawableフォルダに新しい画像を挿入し、Googleの再生から私のアプリを更新すると、いくつかの画像がリストビュー(ListViewはsqliteからCursorAdapterによって膨らんだ)にシフトすることができます – Polurival

+0

画像シフトは[リストビューの(http://stackoverflow.com/questions/6921462/listview-reusing-views-when-i-dont-want-it-to)それはデータベースとdrawables&違いとは関係ありません:私は変換しましたあなたのクエリを見て** Int ** ** String **私はあなたの推測では、その列の列の種類がテキストまたはvarchar **可能性がありますので、データベースに文字列を入力していると思います。それが** Int **の場合、そのまま残すことができます** R.drawable.aed ** –

+0

私はViewHolderをアダプターに持っています。 – Polurival

関連する問題