Android Picasso 2.5.2,显示来自listivew内部适配器的图像。使用异步任务

时间:2016-09-21 10:17:52

标签: android listview adapter picasso

我想使用Picasso库来下载并显示来自我服务器的JSON数据中的网址中的图片。

我已经失去了所有的希望,我看到了custom adapter的一些东西,但无济于事。 我在这里需要帮助。

以下是我现在用来显示jsononPostExecute的数据的方法:

protected  void onPostExecute(JSONObject objdanejson){
    pDialog.dismiss();

    try {
        android = objdanejson.getJSONArray(TAG_ZAWARTOSC);
        for(int i = 0; i < android.length(); i++){
            JSONObject c = android.getJSONObject(i);

            final String akt_tytul = c.getString(TAG_TYTUL);
            final String akt_skrot = c.getString(TAG_SKROT);
            final String akt_tresc = c.getString(TAG_TRESC);
            final String akt_id = c.getString(TAG_ID);
            final String akt_IMG = c.getString(TAG_IMG);

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

            map.put(TAG_TYTUL, akt_tytul);
            map.put(TAG_SKROT, akt_skrot);
            map.put(TAG_ID, akt_id);
            map.put(TAG_TRESC, akt_tresc);
            map.put("http://www.apirest.poligon.webimpuls.pl/"+TAG_IMG, akt_IMG);

            oslist.add(map);
            lista_aktualnosci = (ListView)findViewById(R.id.lista_aktualnosci);

            final ListAdapter adapter = new SimpleAdapter(aktualnosci.this, oslist,
                R.layout.aktualnosc_item,
                new String[]{TAG_TYTUL, TAG_SKROT, TAG_IMG}, new int[]{R.id.aktTytul, R.id.aktSkrot, R.id.aktIMG});

            lista_aktualnosci.setAdapter(adapter);

            lista_aktualnosci.setOnItemClickListener(new AdapterView.OnItemClickListener(){
                @Override
                public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                    Toast.makeText(aktualnosci.this, "Kliknąłeś na " + oslist.get(+position).get("akt_tytul"),Toast.LENGTH_SHORT).show();

                    Intent czytaj = new Intent(aktualnosci.this, aktualnosc_czytaj.class);
                    czytaj.putExtra("tytuł",oslist.get(+position).get("akt_tytul"));
                    czytaj.putExtra("tresc",oslist.get(+position).get("akt_tresc"));
                    czytaj.putExtra("id",oslist.get(+position).get("akt_id"));
                    startActivity(czytaj);
                }
            });
        }
    }
    catch (JSONException e) {
        e.printStackTrace();
    }
}

修改

我的自定义控制器如何显示:

oslist.add(map);
lista_aktualnosci = (ListView)findViewById(R.id.lista_aktualnosci);

/*   final ListAdapter adapter = new SimpleAdapter(aktualnosci.this, oslist,
    R.layout.aktualnosc_item,
    new String[]{TAG_TYTUL, TAG_SKROT}, new int[]{R.id.aktTytul, R.id.aktSkrot});
*/
class ListAdapter extends ArrayAdapter<ClipData.Item> {

    public ListAdapter(Context context, int textViewResourceId) {
        super(context, textViewResourceId);
    }

    public ListAdapter(Context context, int resource, List<ClipData.Item> items) {
        super(context, resource, items);
    }

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

        View v = convertView;

        if (v == null) {
            LayoutInflater vi;
            vi = LayoutInflater.from(getContext());
            v = vi.inflate(R.layout.aktualnosc_item, null);
        }

        ClipData.Item p = getItem(position);

        if (p != null) {
            aktTytul = (TextView)findViewById(R.id.aktTytul);
            aktSkrot = (TextView)findViewById(R.id.aktSkrot);
            aktIMG = (ImageView)findViewById(R.id.aktIMG);
        }

        return v;
    }

}

lista_aktualnosci.setAdapter(adapter);

2 个答案:

答案 0 :(得分:0)

创建一个扩展Simple AdapterBase Adapter的类。在getView()中,adapter会要求您在需要时创建列表项。在创建项目时,您可以使用Picasso在您为此目的选择的任何图像视图中显示图像。

据说你应该放弃ListView并使用RecyclerView代替 - 你可以找到所需的所有信息here

可能会改善代码的其他内容包括RetrofitGson

这有帮助吗?

答案 1 :(得分:0)

您可以从listview获取图片。您可以在设置适配器后对此活动进行编码,然后您可以设置您的imageview。

for(int i = 0; i < this.listView.getChildCount(); i ++) {
           View view = this.listView.getChildAt(i);
           ImageView img= (ImageView)view.findViewById(R.id.yourimage);
           //do something your image 
}