2016-03-28 3 views
0

Я работаю над проектом, в котором я получаю URL изображения динамически из базы данных. Я ранее создал галерею в LinearLayout, что хорошо. Но я хочу создать Gridview, в котором я могу добавить фотографии таким же образом. Может ли кто-нибудь дать мне подсказку или представление о том, с чего начать. Я также создал фрагмент GridView (я хочу gridview в фрагменте) и класс ImageAdapter согласно учебнику здесь.
http://developer.android.com/guide/topics/ui/layout/gridview.htmlДобавить изображения из picasso в Gridview

Это руководство предназначено для загрузки изображений из местных ресурсов, которые мне не нужны. Также я попробовал поиск в Интернете, но не смог найти подходящий способ. Любая помощь будет оценена по достоинству. Спасибо!.

Edit:

ImageAdapter.java

package com.example.imran.myapp; 

import android.content.Context; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.BaseAdapter; 
import android.widget.GridView; 
import android.widget.ImageView; 

import com.squareup.picasso.Picasso; 

/** 
* Created by imran on 28-Mar-16. 
*/ 
public class ImageAdapter extends BaseAdapter { 
    private Context mContext; 
    String url = "https://www.google.com/images/srpr/logo11w.png"; 
    public ImageAdapter(Context c) { 
     mContext = c; 
    } 

    public int getCount() { 
     return mThumbIds.length; 
    } 

    public Object getItem(int position) { 
     return null; 
    } 

    public long getItemId(int position) { 
     return 0; 
    } 

    // create a new ImageView for each item referenced by the Adapter 
    public View getView(int position, View convertView, ViewGroup parent) { 
     ImageView imageView; 
     if (convertView == null) { 
      // if it's not recycled, initialize some attributes 
      imageView = new ImageView(mContext); 
      imageView.setLayoutParams(new GridView.LayoutParams(200, 200)); 
     } else { 
      imageView = (ImageView) convertView; 
     } 

     Picasso.with(this.mContext).load(url).resize(100, 100).into(imageView); 
     Picasso.with(this.mContext).setLoggingEnabled(true); 

     return imageView; 
    } 

    // references to our images 
    public Integer[] mThumbIds = { 
      /*R.drawable.title_background, 
      R.drawable.title_background, 
      R.drawable.title_background, R.drawable.sample_7, 
      R.drawable.sample_0, R.drawable.sample_1, 
      R.drawable.sample_2, R.drawable.sample_3, 
      R.drawable.sample_4, R.drawable.sample_5, 
      R.drawable.sample_6, R.drawable.sample_7, 
      R.drawable.sample_0, R.drawable.sample_1, 
      R.drawable.sample_2, R.drawable.sample_3, 
      R.drawable.sample_4, R.drawable.sample_5, 
      R.drawable.sample_6, R.drawable.sample_7 
      */ 
    }; 
} 

gridgallery.java

package com.example.imran.myapp; 


import android.graphics.BitmapFactory; 
import android.os.Bundle; 
import android.support.v4.app.Fragment; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.GridView; 
import android.widget.ImageView; 
import android.widget.LinearLayout; 
import android.widget.TextView; 
import android.widget.Toast; 

import com.android.volley.Request; 
import com.android.volley.RequestQueue; 
import com.android.volley.Response; 
import com.android.volley.VolleyError; 
import com.android.volley.toolbox.StringRequest; 
import com.android.volley.toolbox.Volley; 
import com.squareup.picasso.Picasso; 

import org.json.JSONArray; 
import org.json.JSONException; 
import org.json.JSONObject; 

import java.util.HashMap; 
import java.util.Map; 


/** 
* A simple {@link Fragment} subclass. 
*/ 
public class gridgallery extends Fragment { 


    public gridgallery() { 
     // Required empty public constructor 
    } 


    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 
     View view = inflater.inflate(R.layout.fragment_gridgallery, null); 
     Myserver myserver = new Myserver(); 

     postStringRequest(myserver.url+"/api/albums/getalbums.php",view); 
     return view; 

     // Inflate the layout for this fragment 
     //return inflater.inflate(R.layout.fragment_gridgallery, container, false); 
    } 

    public View postStringRequest(final String url,final View view){ 
     //final View view = inflater.inflate(R.layout.fragment_gallery, null); 
     final TextView t = (TextView)view.findViewById(R.id.main_msg_gallery); 
     // Instantiate the RequestQueue. 
     RequestQueue queue = Volley.newRequestQueue(getContext()); 

     // Request a string response from the provided URL. 
     StringRequest stringRequest = new StringRequest(Request.Method.POST, url, 
       new Response.Listener<String>() { 
        @Override 
        public void onResponse(String response) { 
         // Display the first 500 characters of the response string 

         // LinearLayout linearLayout = (LinearLayout)view.findViewById(R.id.fragment_gallery); 
         //GridView gridView = (GridView)view.findViewById(R.id.fragment_gridgallery); 
         //gridView.setAdapter(new ImageAdapter(getContext())); 
         try { 
          JSONArray jsonObj = new JSONArray(response); 
          Myserver myserver = new Myserver(); 
          for (int i=0;i<jsonObj.length();i++){ 
           JSONObject c = jsonObj.getJSONObject(i); 

           //ImageView albumpic = new ImageView(getContext()); 
           //Picasso.with(getContext()).load(myserver.url+"/images/thumbs/tn_"+c.getString("album_thumbnail")).centerCrop().resize(200,200).into(albumpic); 
           //linearLayout.addView(albumpic); 
           // gridView.addView(albumpic); 

           GridView gridView = (GridView) view.findViewById(R.id.fragment_gridgallery); 
           ImageAdapter myadap = new ImageAdapter(getContext()); 
           myadap.url = myserver.url+"/images/thumbs/tn_"+c.getString("album_thumbnail"); 
           gridView.setAdapter(myadap); 

          } 

         } catch (JSONException e) { 
          e.printStackTrace(); 
         } 
        } 
       }, new Response.ErrorListener() { 
      @Override 
      public void onErrorResponse(VolleyError error) { 
       t.setText("Server error - Unable to reach server"); 
       Toast.makeText(getContext(), "Unable to reach server", Toast.LENGTH_LONG).show(); 
      } 
     }) { 
      @Override 
      protected Map<String, String> getParams() { 
       Map<String, String> params = new HashMap<String, String>(); 
       params.put("getalbum", "getalbum"); 
       return params; 
      } 
     }; 
     queue.add(stringRequest); 
     return view; 
    } 



} 
+0

Каковы ваши difficults, использование Пикассо? –

+0

@IvanIvanov я не получил вас –

+0

Я использовал Picasso с 'LinearLayout' не с' GridView'. И я хочу использовать Picasso с «GridView» для получения изображений из Picasso и вставлять их в «GridView» программно. –

ответ

1

Это тот, который я недавно работал. Существует несколько способов сделать это, но вам всегда придется расширять/импортировать ListAdapter, который является базовым для всех этих типов для listView. Вот как это сделать:

  1. Создайте адаптер, как всегда, при создании ListView или массива list, который расширяет ListAdapter. (Для меня я назвал его GroupTileAdapater.java)
  2. Вам нужно будет создать свой собственный вид для плитки, который так же будет создан для каждого списка. Для меня я просто создал макет и заполнил весь вид с помощью imageview, и вы можете настроить все, что захотите. (Он назывался media_tile.xml внутри res/layout)
  3. Затем вы должны указать изображение внутри адаптера , найдя соответствующий идентификатор, который вы создали в представлении изображения в виде плитки. (Вызывая метод Пикассо, который вы посмотрите на вопрос, который я разместил недавно можно, Load image through picasso)

Чтобы быть более конкретным, вы бы переопределить 4 метода из listAdapter, GetCount, GetItem, getItemId, GetView и при настройке адаптера вы передадите свои списки изображений в конструктор, а внутри getView вы увидите изображения.

  1. Теперь вы должны установить адаптер для любого фрагмента/действия, в котором вы находитесь, с любым макетом, который вы инициализировали своим gridview.

И я не знаю, что ваш тип URL, но если он начинается с файла/контента, обратите внимание на следующее, contentUri:show image, и соединиться с Picasso. Есть видеоролики youtube, которые могут помочь вам, а также узнать больше о listAdapter. Надеюсь, поможет!

+0

Спасибо. Пожалуйста, просмотрите мой отредактированный вопрос и посмотрите код. Во втором файле мой цикл работает несколько раз. Но независимо от того, сколько раз изображения цикла запуска не отображаются, пока я не раскомментирую что-то в 'public Integer [] mThumbIds'. –

+0

@ImranAslam У изображений появляются? Как отображаются изображения? И разве вы не сказали, что хотите показать изображения, поступающие с сервера? Затем эти неудовлетворенные коды становятся ненужными. Взгляните на этот пример, я думаю, вы почти там. [пример baseAdapter] (http://www.pcsalt.com/android/listview-using-baseadapter-android/) – xosuma

+0

Это не то, что я хочу. –

0

Спасибо, ребята, за вашу помощь, я, наконец, понял это.

ImageAdapter.java

public class ImageAdapter extends BaseAdapter { 
    private Context mContext; 

    public ImageAdapter(Context c, String urls[]) { 
     mContext = c; 
     mThumbIds = urls; 
     //myurls = urls; 
    } 

    public int getCount() { 
     return mThumbIds.length; 
    } 

    public Object getItem(int position) { 
     return null; 
    } 

    public long getItemId(int position) { 
     return position; 
     //return 0; 
    } 

    public String getURL(int position){ 
     return mThumbIds[position]; 
    } 

    // create a new ImageView for each item referenced by the Adapter 
    public View getView(int position, View convertView, ViewGroup parent) { 
     ImageView imageView; 
     if (convertView == null) { 
      // if it's not recycled, initialize some attributes 
      imageView = new ImageView(mContext); 
      imageView.setLayoutParams(new GridView.LayoutParams(200, 200)); 
      imageView.setScaleType(ImageView.ScaleType.CENTER_CROP); 
      imageView.setPadding(20, 20, 20, 20); 
     } else { 
      imageView = (ImageView) convertView; 
     } 

     // imageView.setImageResource(mThumbIds[position]); 

     Picasso.with(mContext) 
       .load(mThumbIds[position]) 
       .into(imageView); 
     return imageView; 
    } 

    //private ArrayList<String> myurls = new ArrayList<String>(); 

    // references to our images 
    private String[] mThumbIds = { 

    }; 
} 

gridgallery.java (фрагмент)

package com.example.imran.myapp; 


    public class gridgallery extends Fragment { 


    public gridgallery() { 
     // Required empty public constructor 
    } 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 
     View view = inflater.inflate(R.layout.fragment_gridgallery, null); 
     Myserver myserver = new Myserver(); 
     postStringRequest(myserver.url + "/api/albums/getalbums.php", view); 
     return view; 
    } 

    public View postStringRequest(final String url,final View view){ 
     //final View view = inflater.inflate(R.layout.fragment_gallery, null); 
     // Instantiate the RequestQueue. 
     RequestQueue queue = Volley.newRequestQueue(getContext()); 

     // Request a string response from the provided URL. 
     StringRequest stringRequest = new StringRequest(Request.Method.POST, url, 
       new Response.Listener<String>() { 
        @Override 
        public void onResponse(String response) { 
         GridView gv = (GridView)view.findViewById(R.id.fragment_gridgallery); 
         ArrayList<String> urls2 = new ArrayList<String>(); 
         try { 
          JSONArray jsonObj = new JSONArray(response); 
          Myserver myserver = new Myserver(); 
          for (int i=0;i<jsonObj.length();i++){ 
           JSONObject c = jsonObj.getJSONObject(i); 
           String imgurl = myserver.url+"/images/thumbs/tn_"+c.getString("album_thumbnail"); 
           urls2.add(imgurl); 
          } 
          String myabc[] = urls2.toArray(new String[urls2.size()]); 
          final ImageAdapter myadapter = new ImageAdapter(getContext(),myabc); 
          gv.setAdapter(myadapter); 
          gv.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
           @Override 
           public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
            Toast.makeText(getContext(),myadapter.getURL(position),Toast.LENGTH_LONG).show(); 
           } 
          }); 


         } catch (JSONException e) { 
          e.printStackTrace(); 
         } 

        } 
       }, new Response.ErrorListener() { 
      @Override 
      public void onErrorResponse(VolleyError error) { 
       Toast.makeText(getContext(), "Unable to reach server", Toast.LENGTH_LONG).show(); 
      } 
     }) { 
      @Override 
      protected Map<String, String> getParams() { 
       Map<String, String> params = new HashMap<String, String>(); 
       params.put("getalbum", "getalbum"); 
       return params; 
      } 
     }; 
     queue.add(stringRequest); 
     return view; 
    } 



} 
Смежные вопросы