在我的情况下,我需要在列表视图中仅显示一个对象(仅标题)

时间:2014-12-18 05:24:48

标签: java android listview object android-arrayadapter

我正在使用Listview,我得到一个Json响应,我使用Gson解析,响应包含标题,正文和图像。对于我的列表视图,我需要显示我正在执行以下操作的标题:

Articles[] testCase = gson.fromJson(Bundlekey, Articles[].class);


            @SuppressWarnings("rawtypes")
            ArrayList list = new ArrayList(); 
            ArrayList<Articles> lst = new ArrayList<Articles>();
            for (int i = 0; i < testCase.length; i++) {
                list.add(testCase[i].getTitle());
                list.add(testCase[i].getBody());
                list.add(testCase[i].getImages());

                lst.add(testCase[i]);
                Log.e("DONE", testCase[i].getTitle().toString());   
            }

            final ArrayAdapter<Articles> adapter = new ArrayAdapter<Articles>(
                    activity, android.R.layout.simple_list_item_1, lst);
            activity.setListAdapter(adapter);

我正在定义我的文章类:

import java.io.Serializable;
import java.util.List;

import com.google.gson.annotations.SerializedName;

public class Articles implements Serializable{
    private static final long serialVersionUID = 8359220892008313080L;
    public List<Articles> results;

    @SerializedName("body")
    private String body;
    @SerializedName("title")
    private String title;
    @SerializedName("images")
    private List<Images> images;

    /*public Articles() {
        this.body = body;
        this.title = title;
        this.images = images;

    }*/

    public String getBody() {
        return body;
    }

    public void setBody(String body) {
        this.body = body;
    }

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public List<Images> getImages() {
        return images ;
    }

    public void setImages(List<Images> images) {
        this.images = images;
    }

    @Override
    public String toString() {
        StringBuilder sb = new StringBuilder();
        sb.append("***** Articles  *****\n");
        sb.append("BODY=" + getBody() + "\n");
        sb.append("TITLE=" + getTitle() + "\n");
        sb.append("IMAGES=" + getImages() + "\n");
        sb.append("*****************************");

        return sb.toString();
    }

}

我的列表显示标题,正文和图像全部混合在一起,我尝试过变通方法,但我似乎并不真正理解下一步是什么,以解决这个问题只显示列表视图中的标题。

非常感谢任何建议/解决方案。

2 个答案:

答案 0 :(得分:2)

适配器ArrayAdapter<Articles> adapter使用Articles的toString将行显示在列表中。正如您在toString()Articles中使用了所有三个属性一样,正如您所说,这显示了所有三个属性。


您只需title使用toString(),然后它只会将标题显示为列表行。

toString()代码替换为

@Override
public String toString() {
    // Return only title from this method to print title into list row.
    StringBuilder sb = new StringBuilder();
    sb.append("TITLE=" + getTitle() + "\n");
    return sb.toString();
    // OR
    // return getTitle(); // Better is to return this.title;
}

答案 1 :(得分:1)

@Pankaj Kumar所说的是对的。如果您不想弄乱Articles课程的结构,您可以将标题存储到新的String[]中并使用它来初始化ArrayAdapter

也就是说,在填充了包含所有lst的{​​{1}}之后:

Articles

然后使用String[] titles = new String[lst.size()]; int i = 0; for(Articles article: lst) { titles[i] = article.getTitle(); i++; } 初始化您的ArrayAdapter

titles