【问题标题】:Android Picasso 2.5.2, showing images from adapter inside listivew. With async taskAndroid Picasso 2.5.2,显示来自 listivew 内适配器的图像。使用异步任务
【发布时间】:2017-01-29 12:55:28
【问题描述】:

我想使用Picasso 库从我的服务器下载并显示位于JSON 数据中的URL 中的图像。

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

下面是我现在如何在onPostExecute 中显示来自json 的数据:

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);

【问题讨论】:

  • 您需要实现一个自定义适配器...显示您的自定义适配器代码,然后我们可以检查它..另外,将您的数据保存在模型类中并将整个对象传递给您的自定义适配器
  • 你可以使用retrofit代替异步任务。它会自动将json结果设置到你的模型类中。
  • 我不知道如何开始创建自定义适配器。有了这个我需要帮助。

标签: android listview adapter picasso


【解决方案1】:

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

话虽如此,您应该放弃 ListView 并改用 RecyclerView - 您可以找到所需的所有信息 here

RetrofitGson 等其他可以改进代码的东西。

这有帮助吗?

【讨论】:

  • 那么这个类应该是什么样子?
  • 我做了一些事情,但是 IDK 它与我的代码有什么关系。
  • 老实说,在查看了您发布的毕加索的内容后,您遇到的问题最少。你真的应该回到基础,看看继承是如何工作的,以及 android 如何处理视图和视图列表。别人现在可以帮助您的唯一其他方法就是为您编写代码。
  • 我只需要一点代码提示。然后我会得到它。
  • 不行,你需要回去学习面向对象编程的基础知识。
【解决方案2】:

您可以从列表视图中获取您的图像。您可以在设置适配器之后对您的活动进行编码,然后您可以设置您的图像视图。

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 
}

【讨论】:

  • 你可以用毕加索调用你的图像
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-26
  • 1970-01-01
相关资源
最近更新 更多