Как использовать Пикассо в списке - PullRequest
0 голосов
/ 29 июня 2018

В настоящее время я использую sipleAdapter (), чтобы создать адаптер и поместить в listView. но я хочу поместить изображение в это представление списка, поэтому решение заключается в создании настраиваемого адаптера, но в настраиваемом адаптере (BeritaAdapter) мой метод Пикассо не может быть разрешен с помощью ().

Picasso.with(context).load(url).into(img);

вот мой класс Берита

public class Berita extends AppCompatActivity {

ListView listview;
ArrayList<HashMap<String,String>> beritaList;
String id_kategori;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.berita);
    Intent i = getIntent();
    id_kategori = i.getStringExtra("id_kategori");
    beritaList = new ArrayList<HashMap<String, String>>();

    RequestQueue queue = Volley.newRequestQueue(this);
    String url = "http://192.168.166.2/android/portal/berita/kategori";
    StringRequest postRequest = new StringRequest(Request.Method.POST, url,
            new Response.Listener<String>() {
        @Override
        public void onResponse(String response){
            // response
            Log.d("hasil", response.toString());
            try {
                JSONObject responobjek = new JSONObject(response);
                JSONArray jsonArray = responobjek.getJSONArray("berita");
                Log.d("hasil jsonarray", jsonArray.toString());
                for (int i = 0; i < jsonArray.length(); i++) {
                    JSONObject c = jsonArray.getJSONObject(i);
                    HashMap<String, String> map = new HashMap<String, String>();

                    map.put("id_berita", c.getString("id_berita"));
                    map.put("judul_berita", c.getString("judul_berita"));
                    map.put("gambar_berita", c.getString("gambar_berita"));

                    beritaList.add(map);
                }
                String[] keys = {"id_berita", "judul_berita"};
                int[] ids = { R.id.id_berita, R.id.judul_berita};
//MY CUSTOM ADAPTER
                BeritaAdapter adapter = new BeritaAdapter(Berita.this, beritaList, R.layout.list_item_berita, keys, ids);
                listview.setAdapter(adapter);
            }catch (JSONException e) {
                e.printStackTrace();
            }
        }
    },new Response.ErrorListener(){
        @Override
        public void onErrorResponse(VolleyError error) {
            // error
            Log.d("Error.Response", "embuh error opo");
        }
    }
    ){
        @Override
        protected Map<String, String> getParams()
        {
            Map<String, String>  params = new HashMap<String, String>();
            params.put("id_kategori", id_kategori);
            return params;
        }
    };
    queue.add(postRequest);
}

}

В этом скрипте я использую свой собственный адаптер, то есть BeritaAdapter (). а вот файл BeritaAdapter

public class BeritaAdapter extends SimpleAdapter{

Context context;

public BeritaAdapter(Context context, List<? extends Map<String, ?>> data, int resource, String[] from, int[] to){
    super(context, data, resource, from, to);
    this.context = context;
}

public View getView(int position, View convertView, ViewGroup parent){
    // here you let SimpleAdapter built the view normally.
    View v = super.getView(position, convertView, parent);

    // Then we get reference for Picasso
    ImageView img = (ImageView) v.getTag();
    if(img == null){
        img = v.findViewById(R.id.gambar_berita);
    }
    // get the url from the data you passed to the `Map`
    String url = (String) ((Map)getItem(position)).get("gambar_berita");
    Picasso.with(context).load(url).into(img);

    // return the view
    return v;
}

}

как я могу получить контекст, чтобы я мог вставить

Picasso.with(context).load(url).into(img);

Ответы [ 2 ]

0 голосов
/ 29 июня 2018

попробуйте это:

 @Override
public View getView(int position, View convertView, ViewGroup parent) {
    if (null == convertView) {
        convertView = inflater.inflate(R.layout.listview_item_image, parent, false);
    }

    Picasso
        .with(context)
        .load(imageUrls[position])
        .fit() // will explain later
        .into((ImageView) convertView);

    return convertView;
}
0 голосов
/ 29 июня 2018

Вы можете расширить конструктор BaseAdapter и запросить контекст в качестве параметра объекта. Затем во время процесса инициализации вы можете использовать ключевое слово «this», getApplicationContext и так далее.

 public class BeritaAdapter extends SimpleAdapter{

    Context context;

    public BaritaAdapter(Context context) {
        this.context = context;
    }

    public BeritaAdapter(Context context, List<? extends Map<String, ?>> data, int resource, String[] from, int[] to){
        super(context, data, resource, from, to);
        this.context = context;
    }

    public View getView(int position, View convertView, ViewGroup parent){
        // here you let SimpleAdapter built the view normally.
        View v = super.getView(position, convertView, parent);

        // Then we get reference for Picasso
        ImageView img = (ImageView) v.getTag();
        if(img == null){
            img = v.findViewById(R.id.gambar_berita);
        }
        // get the url from the data you passed to the `Map`
        String url = (String) ((Map)getItem(position)).get("gambar_berita");
        Picasso.with(context).load(url).into(img);

        // return the view
        return v;
    }

Тогда

BeritaAdapter mAdapter = new BeritaAdapter(this);

Или

Berita Adapter mAdapter = new BeritaAdapter(getApplicationContext);
...