0

リストビューの実装に取り​​組んでいます。ユーザーBaseAdapterクラスがあります。配列リストからホルダーのテキストビューフィールドにsetTextを設定しようとしていますが、成功しません。問題はgetViewメソッドのHashMap<String, ArrayList<String>> map = list.get(position); holder.txtFirst.setText(map.get(FIRST_COLUMN).toString()); 一部にあります。
編集:リストアダプタクラスのキーと値を設定して いる私のメインアクティビティクラス(postExecuteメソッド)。コードは次のとおりです:

protected void onPostExecute(ArrayList<ArrayList<String>> result) {

        ArrayList<String> conceptID = new ArrayList<String>(result.get(0));
        ArrayList<String> conceptDesc = new ArrayList<String>(result.get(1));

        listForSearchConcepts = new ArrayList<HashMap<String,ArrayList<String>>>();
        HashMap<String, ArrayList<String>> temp = new HashMap<String,ArrayList<String>>();
        temp.put(FIRST_COLUMN,conceptID);
        listForSearchConcepts.add(temp);
        temp.put(SECOND_COLUMN,conceptDesc);
        listForSearchConcepts.add(temp);
        listviewAdapter adapter = new listviewAdapter(MainActivity.this, listForSearchConcepts);
        listView.setAdapter(adapter);
    }`   

ただし、以下はアダプタクラスの私のコードです:

public class listviewAdapter extends BaseAdapter
{
public ArrayList< HashMap < String,ArrayList < String > > > list;
Activity activity;

public listviewAdapter(Activity activity, ArrayList<HashMap<String,ArrayList<String>>> listForSearchConcepts) {
    super();
    this.activity = activity;
    this.list = listForSearchConcepts;
}

public int getCount() {
    // TODO Auto-generated method stub
    return list.size();
}

public Object getItem(int position) {
    // TODO Auto-generated method stub
    return list.get(position);
}

public long getItemId(int position) {
    // TODO Auto-generated method stub
    return 0;
}

private class ViewHolder {
       TextView txtFirst;
       TextView txtSecond;
       TextView txtThird;
       TextView txtFourth;
  }


public View getView(int position, View convertView, ViewGroup parent) {
    // TODO Auto-generated method stub

    // TODO Auto-generated method stub
            ViewHolder holder;
            LayoutInflater inflater =  activity.getLayoutInflater();

            if (convertView == null)
            {
                convertView = inflater.inflate(R.layout.listview_row, null);
                holder = new ViewHolder();
                holder.txtFirst = (TextView) convertView.findViewById(R.id.FirstText);
                holder.txtSecond = (TextView) convertView.findViewById(R.id.SecondText);
                convertView.setTag(holder);
            }
            else
            {
                holder = (ViewHolder) convertView.getTag();
            }

            HashMap<String, ArrayList<String>> map = list.get(position);
            holder.txtFirst.setText(map.get(FIRST_COLUMN).toString());
            //holder.txtSecond.setText(map.get(SECOND_COLUMN).get(1));
            //holder.txtThird.setText(map.get(THIRD_COLUMN));
            //holder.txtFourth.setText(map.get(FOURTH_COLUMN));

        return convertView;
}

}

また、実際にアプリケーションを実行しているもののスクリーンショットを添付しています。
アウトプットリストビュー

なにか提案を?
ありがとう

4

2 に答える 2

6

hasmap と arraylist をクラスに置き換えることを強くお勧めします。Java には、マップ リストを使用して構造を操作する機能がありません。Javaでは見た目が悪いだけです。とConceptの 2 つのフィールドを含むクラスを作成できます。メソッドでは、リストを概念のリストに変換します。このようなもの:iddescriptionpostExecute

コンセプトクラス:

public class Concept {

    public String id;
    public String description;
}

onPostExecute メソッド:

protected void onPostExecute(List<List<String>> result) {

    List<String> conceptID = result.get(0);
    List<String> conceptDesc = result.get(1);

    List<Concept> listForSearchConcepts = new ArrayList<Concept>();
    for (int i = 0; i < conceptID.size(); i++) {
        Concept concept = new Concept();
        concept.id = conceptID.get(i);
        concept.description = conceptDesc.get(i);
        listForSearchConcepts.add(concept);
    }
    ListViewAdapter adapter = new ListViewAdapter(MainActivity.this, listForSearchConcepts);
    listView.setAdapter(adapter);
}

ListViewAdapter クラス:

class ListviewAdapter extends BaseAdapter
{
    public List<Concept> list;
    Activity activity;

    public ListviewAdapter(Activity activity, List<Concept> listForSearchConcepts) {
        super();
        this.activity = activity;
        this.list = listForSearchConcepts;
    }

    public int getCount() {
        return list.size();
    }

    public Object getItem(int position) {
        return list.get(position);
    }

    public long getItemId(int position) {
        return 0;
    }

    private class ViewHolder {
        TextView txtFirst;
        TextView txtSecond;
        TextView txtThird;
        TextView txtFourth;
    }


    public View getView(int position, View convertView, ViewGroup parent) {
        // TODO Auto-generated method stub

        // TODO Auto-generated method stub
        ViewHolder holder;
        LayoutInflater inflater =  activity.getLayoutInflater();

        if (convertView == null)
        {
            convertView = inflater.inflate(R.layout.listview_row, null);
            holder = new ViewHolder();
            holder.txtFirst = (TextView) convertView.findViewById(R.id.FirstText);
            holder.txtSecond = (TextView) convertView.findViewById(R.id.SecondText);
            convertView.setTag(holder);
        }
        else
        {
            holder = (ViewHolder) convertView.getTag();
        }

        Concept concept = list.get(position);
        holder.txtFirst.setText(concept.id);
        holder.txtSecond.setText(concept.description);

        return convertView;
    }

}
于 2012-09-24T07:27:31.383 に答える
1

これらの行だけが原因でエラーが発生します。

HashMap<String, ArrayList<String>> map = list.get(position);      
holder.txtFirst.setText(map.get(FIRST_COLUMN).toString());

HashMap<String, ArrayList<String>> map = list.get(position); 
/* this hashmap will give a hashmap of arraylist So first you have to get the arralist with its related key from the hashmap. Then you can go for getting the column from that arralist. */

/*
holder.txtFirst.setText(map.get(FIRST_COLUMN).toString());
But here you are getting the column from the hashmap that is wrong. you can get only arraylist from the hashmap with key.
*/
于 2012-09-24T06:47:06.387 に答える