Android使用自定义类向arraylist添加项目

时间:2013-01-22 14:54:20

标签: android listview arraylist

我正在尝试使用此类模板向arraylist添加项目:

public class Template {
public String username;
public String email;

}

以下是整个代码:

public void JsonToArrayList(JSONArray myJsonArray) throws JSONException
{
    ArrayList<Template> listItems = new ArrayList<Template>();
    JSONObject jo = new JSONObject();
    Template tem = new Template();
    ListView lv = (ListView) findViewById(R.id.listView1);

    for(int i = 0; i<myJsonArray.length(); i++)
    {
        jo = myJsonArray.getJSONObject(i);
        tem.username = jo.getString("username");
        tem.email = jo.getString("user_email");

        listItems.add(tem);         
        Log.e("Ninja Archives", tem.username);

    }
    // This is the array adapter, it takes the context of the activity as a first // parameter, the type of list view as a second parameter and your array as a third parameter
    ArrayAdapter<Template> arrayAdapter = new ArrayAdapter<Template>(this,android.R.layout.simple_list_item_1, listItems);
    lv.setAdapter(arrayAdapter); 

}   

问题是,不是用精美的用户名和电子邮件字符串填充我的列表视图,而是填写这样的项目:

com.android.ninjaarchives。 模板@ 40585690

我认为我已经迷失了这条线路,但是我现在已经尝试了各种各样的事情并且无处可去。有人能指出我正确的方向吗?

感谢您的帮助。

注意:不确定代码发生了什么;它似乎没有正确粘贴。

3 个答案:

答案 0 :(得分:4)

使用以下代码,它可以为您提供解决方案

public void JsonToArrayList(JSONArray myJsonArray) throws JSONException
{
    ArrayList<Template> listItems = new ArrayList<Template>();
    JSONObject jo = new JSONObject();
    Template tem = new Template();
    ListView lv = (ListView) findViewById(R.id.listView1);

    String listItemString[] = new String[myJsonArray.length];

    for(int i = 0; i<myJsonArray.length(); i++)
    {
        jo = myJsonArray.getJSONObject(i);
        tem.username = jo.getString("username");
        tem.email = jo.getString("user_email");
       listItemString[i]  = tem.username +" - " + tem.email; // u can change it according to ur need.
        listItems.add(tem);         
        Log.e("Ninja Archives", tem.username);

    }
    // This is the array adapter, it takes the context of the activity as a first // parameter, the type of list view as a second parameter and your array as a third parameter
    ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1, listItemString);
    lv.setAdapter(arrayAdapter); 

}

但最好通过扩展BaseAdapter编写自定义适配器,并在getView方法here is one simple tutorial中执行listItem处理

答案 1 :(得分:1)

参加一个扩展基础的课程

    private class CustomAdapter extends BaseAdapter
{
    LayoutInflater inflater;
    public CustomAdapter(Context context)
    {
        inflater = LayoutInflater.from(context);
    }

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

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

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

    public View getView(final int position, View convertView,ViewGroup parent)
    {
        //if(convertView==null)
        //convertView = inflater.inflate(R.layout.listlayout, parent, false);
        Template data = (Template) getItem(position);
        TextView v=new TextView(context);
        v.setText(data.name);
        return v;
    }
}

并将适配器设置为listview

lv.setAdapter(new CustomAdapter(this));

答案 2 :(得分:0)

在这种情况下,您必须使用自定义适配器(从ArrayAdapter扩展)并覆盖getView方法,以在自定义布局中显示用户名和电子邮件。