2011-08-03 10 views
0

Androidでリストを作成するために、配列リスト、listView、カスタム単純なアダプタを使用しています。次のコードでは、addItem()を使用して項目を追加します。私はその目的の中にあるいくつかのエクストラを使って、onActivityResultという項目を追加する必要があります。このすべてのはうまく動作しますしかし、問題は、私が得ているそれらのエクストラに基づいて背景色を設定しようとしているときに来ます。私はアダプタがリフレッシュされていないなどと関係があると思います。私のコードは、私が言うことを明確にします。listViewバックグラウンドロジックの問題

SimpleAdapter adapter; 
List<HashMap<String, String>> painItems = new ArrayList<HashMap<String, String>>(); 
ListView listthings; 
int[] to; 
String[] from; 
**OnCreate()**{ 
from = new String[] { "row_1", "row_2" }; 
    to = new int[] { R.id.row1, R.id.row2 }; 

    adapter = new Adapter(this, painItems, R.layout.mylistlayout, from, to); 
      listthings.setAdapter(adapter); 

} 

カスタムアダプタのコード:私は私に項目を追加するときに、再度

protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    if (resultCode == 1) { 
     row1 = data.getStringExtra("com.painLogger.row1"); 
     row2 = data.getStringExtra("com.painLogger.row2"); 
     painLevelString = data.getStringExtra("com.painLogger.painLevel"); 
     painLocation = data.getStringExtra("painLocation"); 
     timeOfPainString = data.getStringExtra("com.painLogger.painTime"); 
     textTreatmentString = data 
       .getStringExtra("com.painLogger.treatment"); 
     addItem(); 

    } 
} 

// to add the item, put it in the map, and add the map into the list 
private void addItem() { 
    HashMap<String, String> map = new HashMap<String, String>(); 
    map.put("row_1", row1); 
    map.put("row_2", row2); 
    map.put("row_3", painLevelString); 
    map.put("row_4", painLocation); 
    map.put("row_5", timeOfPainString); 
    map.put("row_6", textTreatmentString); 
    painItems.add(map); 
    adapter.notifyDataSetChanged(); 

} 

:私は必要なエキストラを取得し、アイテムを追加していどの

public class Adapter extends SimpleAdapter { 
    HashMap<String, String> map = new HashMap<String, String>(); 

    public Adapter(Context context, 
      List<? extends Map<String, String>> data, int resource, 
      String[] from, int[] to) { 
     super(context, data, resource, from, to); 

    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     View row = convertView; 
     row = super.getView(position, convertView, parent); 
     if (row == null) { 
      LayoutInflater mInflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
      row = mInflater.inflate(R.layout.mylistlayout, parent, false); 
     } 

     if (Integer.valueOf(painItems.get(position).get("row_3")) != null) { 
      if (Integer.valueOf(painItems.get(position).get("row_3")) == 2) { 
       row.setBackgroundColor(0xFF0000FF);//**BACKGROUND COLOR SET HERE** 
       //Toast.makeText(getApplicationContext(), "this one", Toast.LENGTH_SHORT).show(); 
      } 
     } 
     return row; 

    } 

} 

をリスト、私は 'painlevelString'が何であるかを見たい。それが特定の値であれば、背景を色に設定したいと思います。すべての追加などは機能していますが、そのアイテムの意図を通るデータに関係なく、背景色を青色に設定するだけです。

私はすべての関連コードを追加したと考えていますが、私の完全な活動はここにあります:http://pastebin.com/4BWQYpnj

は、あなたの条件が真(1色)かない(別の色)である場合は、両方の色を設定する必要があります私の問題

答えて

1

を解決するために、あなたの時間を割いて、事前にありがとうございました。

実際、私はどこでもアダプタクラスのpainItems宣言ができません。あなたは2つのクラスのコードをメッシュしたようです

+0

アダプタクラスのpainItemsの宣言はありません。私は主なアクティビティ 'List > painItems = new ArrayList >();の中でのみ宣言しています。これはメモと同様に、すべて同じ.javaファイルにあります。 – Kgrover

+0

私はちょうどelse文を追加して動作します!すばらしいです!このような迅速な返信をありがとうございました。どのような簡単な修正。 – Kgrover

+0

あなたは大歓迎です! – Maxim

関連する問題