自定义适配器,带有ArrayList <hashmap <string,list <string =“”>&gt;&gt; </hashmap <string,>

时间:2014-03-06 06:41:27

标签: android hashmap adapter

这是一个非常复杂的问题,但我希望有人可以帮助我。

我想制作一个可以处理

的自定义适配器

标题中提到的数组列表

目前我正在这样做,但它甚至没有进入getView(...)方法。

public class EventsAdapter extends BaseAdapter{

ArrayList<HashMap<String, List<String>>> eventList;

private Context context;
private int resource;

   private static final String TAG_TITLE = "e_title";


public EventsAdapter(Context context, int resId,ArrayList<HashMap<String, List<String>>> eventList)
{

    this.context = context;
    this.resource = resId;
    this.eventList = eventList;
    Log.v("chk", "1");

}

@Override
public View getView(int position, View convertView, ViewGroup parent) {


    View event = convertView;

    TextView title, desc, date, time, venue;

    HashMap<String, List<String>> hm = eventList.get(position);



    List<String> items = hm.get(TAG_TITLE);

    Typeface font = Typeface.createFromAsset(context.getAssets(), "Ubahn.ttf"); 

    if( event == null )
    {
        LayoutInflater inflater = ((Activity) context).getLayoutInflater();
        event = inflater.inflate( resource , parent, true  );
        event.setTag(items.get(position));
    }

    title = (TextView) event.findViewById( R.id.etitle);
    desc = (TextView) event.findViewById( R.id.edesc );
    date = (TextView)event.findViewById(R.id.edate);
    time = (TextView)event.findViewById(R.id.etiming);
    venue = (TextView)event.findViewById(R.id.elocation);

    title.setTypeface(font);



    System.out.print(items.get(0).toString());

    title.setText(items.get(0).toString());
    desc.setText(items.get(1).toString());
    date.setText(items.get(2).toString());
    time.setText(items.get(3).toString());
    venue.setText(items.get(4).toString());

    return event;
}

@Override
public int getCount() {
    // TODO Auto-generated method stub
    return 5;
}

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

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

}

非常感谢任何帮助。

以下是我如何填充数组列表中的数据

    for (int i = 0; i < products.length(); i++) {
                    JSONObject c = products.getJSONObject(i);

                    // Storing each json item in variable
                    String title = c.getString(TAG_TITLE);
                    String description = c.getString(TAG_DESC);
                    String date = c.getString(TAG_DATE);
                    String time = c.getString(TAG_TIME);
                    String venue = c.getString(TAG_VENUE);

                    // creating new HashMap

                    HashMap<String, List<String>> map = new HashMap<String, List<String>>();

                    List<String> el = new ArrayList<String>();
                    el.add(title);
                    el.add(description);
                    el.add(date);
                    el.add(time);
                    el.add(venue);

                    // adding each child node to HashMap key => value
                    map.put(TAG_TITLE, el);
                   // map.put(TAG_DESC, description);
                    //muap.put(TAG_DATE, date);

                    // adding HashList to ArrayList
                    eventList.add(map);
                }

然后我在这里设置适配器

EventsAdapter adapter = new EventsAdapter(getActivity(), R.layout.events_list_item, eventList);



                lv.setAdapter( adapter);

3 个答案:

答案 0 :(得分:0)

我认为何时填写该列表会很有用。

一个好的设计模式是将数据创建为空的hashmap,使用该map建立适配器,声明listview(或其他),然后为适配器分配空数据集。稍后,填写hashmap,然后填充adapter.notifydatasetchanged

我宣布这些领域:

    //array of places filtered by keyword
List<Place> places = new ArrayList<Place>( );
    //spinner of places filtered by keyword
Spinner placesSpinner;
//adapter for spinner
private PlacesSpinnerAdapter placesSpinnerAdapter;
在onCreate中

//this is for a spinner, but same difference
placesSpinner = (Spinner)findViewById( R.id.placesSpinner );
placesSpinnerAdapter = new PlacesSpinnerAdapter( this, 
                           android.R.layout.simple_spinner_dropdown_item, places );
placesSpinner.setAdapter( placesSpinnerAdapter );

和AsyncTask的onPostExecute方法中的某个地方你没兴趣

places.clear( );
places.addAll( result.results );
placesSpinnerAdapter.notifyDataSetChanged( );
placesSpinner.performClick( );

最后,这是我看到的一个区别:适配器做列表,我从未玩过很好的时间传递它们的hashmaps ...执行map.keySet()或map.values();当你将数据交给适配器时;我知道如果数据集是散列图

,我刚才描述的标准模式不起作用

gl hf

答案 1 :(得分:0)

getCount方法返回列表大小

@Override
public int getCount() {
    return eventList.size();
}

由于适配器内的数组列表没有5个项目(它只有一个项目),所以请尝试返回列表的大小

答案 2 :(得分:0)

只需将此代码用于自定义适配器 java

public class CustomAdapter extends SimpleAdapter {

    ArrayList<HashMap<String,String>> arrayList;
    Context context;

    public CustomAdapter(Context context,ArrayList<HashMap<String,String>> arrayList, int resource, String[] from ,int[] to) {
        super(context, arrayList, resource, from, to);
        this.context = context;
        this.arrayList = arrayList;
    }

    @Override
    public int getCount() {
        return arrayList.size();
    }

    @Override
    public Object getItem(int position) {
        return arrayList.get(position);
    }

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

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        //return super.getView(position, convertView, parent);
        View view = super.getView(position,convertView,parent);

        RelativeLayout container = (RelativeLayout) 
          view.findViewById(R.id.container);
        return view;
    }
}

这是欢迎活动

ArrayList<HashMap<String, String>> userList = "Define your list here"

        String[] from = new String[]{"name","phone"};
        int[] to = new int[]{R.id.name,R.id.phone};
        ListView lv = (ListView) findViewById(R.id.list);

        CustomAdapter customAdapter = new CustomAdapter(this,userList,R.layout.user_list_f,from,to);
        lv.setAdapter(customAdapter);

它对我来说效果很好