1

DBへのクエリ結果をリストビューで表示する必要があります。クエリ 2 つの値 ("cod"、"value") を返しています。問題を解決するために SimpleAdapter を使用することを考えましたが、うまくいきませんでした。

これは私のコードです:

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.techcharacteristic);

    PopulateTechCharacteristicList populateList = new PopulateTechCharacteristicList(
            this);

    populateList.execute();

    SimpleAdapter adapter = new SimpleAdapter(this, list,
            R.layout.techcharacteristic_rows,
            new String[] {"cod", "value"}, new int[] {
                    R.id.techCharacteristic, R.id.techCharacteristicName });

    setListAdapter(adapter);
}

public class PopulateTechCharacteristicList extends
        AsyncTask<Integer, String, Integer> {

    ProgressDialog progress;
    Context context;

    public PopulateTechCharacteristicList(Context context) {
        this.context = context;
    }

    protected void onPreExecute() {
        progress = ProgressDialog.show(TechCharacteristicList.this,
                getResources().getString(R.string.Wait), getResources()
                        .getString(R.string.LoadingOperations));
    }

    protected Integer doInBackground(Integer... paramss) {

        ArrayList<TechCharacteristic> arrayTechChar = new ArrayList<TechCharacteristic>();
        TechCharacteristicWSQueries techCharWSQueries = new TechCharacteristicWSQueries();

        try {

            arrayTechChar = techCharWSQueries
                    .selectTechCharacteristicByAsset("ARCH-0026");


            HashMap<String, String> temp = new HashMap<String,              

            for(TechCharacteristic strAux : arrayTechChar)
            {
                temp.put("cod", strAux.getTechCharacteristic() + " - " + strAux.getTechCharacteristicName());
                temp.put("value", strAux.getTechCharacteristicValue());
                list.add(temp);
            }


        } catch (QueryException e) {

            e.printStackTrace();
            return 0;
        }

        return 1;
    }

    protected void onPostExecute(Integer result) {

        if(result == 1)
            progress.dismiss();
    }
}

HashMap に値を含めるために同じコード (「cod」、「value」) を使用しているため、listView には常に最後に挿入された項目が表示されます。しかし、私のステートメントでは、SimpleAdapter はハードコードされた ("cod", "value") を使用しており、("cod", "value") 以外の値を HashMap に入れると、listView は空になります。

誰でも私を助けることができますか?

4

1 に答える 1

2

HashMap に値を含めるために同じコード (「cod」、「value」) を使用しているため、listView には常に最後に挿入された項目が表示されます。

HashMapからオブジェクトを作成for loopし、 for ループでのみそのオブジェクトに値を追加しているため、以前の値は消去され、最後の値のみが取得されます。

これを解決するには、各行HashMapに対応するオブジェクトを作成する必要があります。for loop

試す

        HashMap<String, String> temp = null; 

        for(TechCharacteristic strAux : arrayTechChar)
        {
            temp = new HashMap<String,String>();
            temp.put("cod", strAux.getTechCharacteristic() + " - " + strAux.getTechCharacteristicName());
            temp.put("value", strAux.getTechCharacteristicValue());
            list.add(temp);
        }
于 2013-09-03T11:58:59.300 に答える