如何在列表视图中获取图像?

时间:2014-07-19 15:05:31

标签: java android json listview

目前我正在使用我刚导入的ArrayAdapter。正如问题所述,我希望将图像放入我的列表视图中。我使用JSONObjects将信息加载到我的列表中并将它们存储到我的ArrayLists中。我知道我当前的方法从JSONObjects中删除了html tages。

public class Home扩展活动{

ListView lView;
TextView tView;
ArrayAdapter lAdapter;

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.home_layout);
    lView = (ListView) findViewById(android.R.id.list);
    //tView = (TextView) findViewById(android.R.id.);
    loadList(lView);



}

public void loadList(ListView lView){
    StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();

    StrictMode.setThreadPolicy(policy); 
    ServiceHandler sh = new ServiceHandler();

    // Making a request to url and getting response
    String jsonStr = sh.makeServiceCall("URL", ServiceHandler.GET);

    Log.d("Response: ", "> " + jsonStr);
    ArrayList<String> titles = new ArrayList<String>();
    ArrayList<String> body = new ArrayList<String>();

    if (jsonStr != null) {
        try {
            JSONObject jsonObj = new JSONObject(jsonStr);


            // Getting JSON Array node
            JSONArray entries = jsonObj.getJSONArray("entries"); 
            for (int i = 0; i < entries.length(); i++) {
                JSONObject c = entries.getJSONObject(i);
                String text = c.getString("introtext"); 
                if(text == "null"){
                    text = "No text here" + "\n" + "\n";

                }
                else {
                    text = android.text.Html.fromHtml(text).toString();
                }
                String title= c.getString("title");
                String full = title + "\n" + "\n" + text;
                titles.add(full);
                //body.add(text);
            }
        } catch (JSONException e) {
            e.printStackTrace();
        }
    } else {
        Log.e("ServiceHandler", "Couldn't get any data from the url");
    }

    lAdapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1, titles);
    lView.setAdapter(lAdapter);
}

}

任何建议都会很有帮助

由于

4 个答案:

答案 0 :(得分:0)

您需要创建一个定义了您自己的布局的自定义适配器。在此布局中,您可以包含所需的任何内容(包括可放置图像的ImageView)。

有很多例子,但是在你的代码中需要知道的重要事项是,你将在这里提供你自己的适配器,并将它设置得有点不同:

lAdapter = new ArrayAdapter<String>(this, R.layout.my_custom_adapter, titles);

答案 1 :(得分:0)

首先创建一个与想要连续显示的布局相同的布局,现在为自定义适配器创建一个类,如:

public class MyAdapter extends ArrayAdapter<T>{
}

其中T代表实体类,代表您的数据模型。 现在在覆盖方法下:

public View getView(final int position, View convertView, ViewGroup parent) {}

为该行创建的布局充气,并根据需要设置每个视图。 不要忘记使用延迟加载来加载图像视图。

希望它会对你有所帮助。

答案 2 :(得分:0)

  • 尝试使用Base Adapter
  • 使用imageview
  • base adapter充气自定义Xml
  • 您可以根据您的要求放置任何视图(图像,textview等) 要求
  • 最后使用picassoimageloader使用JSON填充图像 响应您的基本适配器

希望有所帮助如果您需要更多帮助,请回复我快乐编码

答案 3 :(得分:0)

您必须创建一个自定义适配器而不是ArrayAdapter,这样您就可以为每一行使用自己的布局,并执行任何图像加载&#39;那里。尝试创建一个从框架中扩展BaseAdapter抽象类的类。此外,搜索网络或此处(在stackoverflow中),您将找到大量有关如何创建自定义适配器的教程。

如果您对ListViews和自定义适配器没有经验,下载和加载图像可能会有点麻烦,我建议您查找两个第三方库来完成这项工作: PicassoUniversal-Image-Loader,每个都有关于如何将它们与自定义适配器一起使用的示例