ListView с подпунктами. (Android)

Мне нужно показать в виде списка результат запроса к БД. Я возвращаю значения запроса 2 ("треска", "значение"). Я думал об использовании 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();
    }
}

Из-за того, что я использую те же коды ("cod", "value") для включения значений в HashMap, мой listView всегда показывает последний вставленный элемент. Но в моем заявлении SimpleAdapter я использую жестко закодированный ("cod", "value") и всякий раз, когда я помещаю любое значение, кроме ("cod", "value") в HashMap, listView переносит пустой.

Может кто-нибудь мне помочь?

1 ответ

Решение

Из-за того, что я использую те же коды ("cod", "value") для включения значений в HashMap, мой 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);
        }
Другие вопросы по тегам