使用从url的图象的Cardview与片段的齐射

时间:2016-12-01 06:01:48

标签: android android-volley android-cardview

我已经在我的应用程序片段中为商店列表创建了一个cardview,现在我正在尝试将我在片段中收到的商店的信息(名称,图像等)解析到我的cardview适配器中。是一个单独的类。如何将图像从片段传递给类以及如何在类中请求GET

我称之为商店列表的片段:

public class StoreList extends Fragment{
int row;
private Switch mySwitch;
private static String api = "stores";
RecyclerView mRecyclerView;
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {


    //my domain
    SharedPreferences sp=this.getActivity().getSharedPreferences("domainname", Context.MODE_PRIVATE);
    String domain = sp.getString("domainname", "");

    final View rootView = inflater.inflate(R.layout.store_list, container, false);
    VolleyGet.getInstance(getActivity());
    VolleyGet.getInstance().VolleyGET(domain, api, new CustomListener<String>(){
        @Override
        public void getResult(String result){
            if (!result.isEmpty())
            {
                Log.e("storelist---------->", result);
                //result for storelist

            }

        }

    });
mRecyclerView =   (RecyclerView)rootView.findViewById(R.id.recycler_view);
        mRecyclerView.setHasFixedSize(true);


        RecyclerView.LayoutManager gmLayoutManager = new GridLayoutManager(getActivity(),row);
        mRecyclerView.setLayoutManager(gmLayoutManager);
        RecyclerView.Adapter mAdapter;
        mAdapter = new CardAdapter();
        mRecyclerView.setAdapter(mAdapter);
        return rootView;
}

请求GET方法的VolleyGet.class

public class VolleyGet {
private static final String TAG = "VolleyGet";
private static VolleyGet instance = null;

//for Volley API
public RequestQueue requestQueue;

private VolleyGet(Context context)
{
    requestQueue = Volley.newRequestQueue(context.getApplicationContext());

    return;


}

public static synchronized VolleyGet getInstance(Context context)
{
    if (null == instance)
        instance = new VolleyGet(context);
    return instance;
}

public static synchronized VolleyGet getInstance()
{
    if (null == instance)
    {
        throw new IllegalStateException(VolleyGet.class.getSimpleName() +
                " is not initialized, call getInstance(...) first");
    }
    return instance;

}

public void VolleyGET(String domain, String api, final CustomListener<String> listener){

    StringRequest sr = new StringRequest(Request.Method.GET, domain +api,
            new Response.Listener<String>() {


                @Override
                public void onResponse(String response) {
                    Log.e("HttpClient", "success! response: " + response);
                    if(null != response)
                    listener.getResult(response);
                    return;
                }
            },
            new Response.ErrorListener() {
                @Override
                public void onErrorResponse(VolleyError error) {
                    if (null != error.networkResponse)
                    {
                        Log.d(TAG + ": ", "Error Response code: " + error.networkResponse.statusCode);
                        //listener.getResult(false);
                    }
                }
            });
    requestQueue.add(sr);

}}

我的CustomListener

public interface CustomListener<T> {
public void getResult(T object);
}

我将收到的JSONObject将采用以下形式:

{"data":[{"id":"1127ae33-e435-4506-9cb2-8806f6b77636",
"name":"Japan Clothing Tokyo branch",
"wifi":true,
"pending":true,
"averageCost":"100-200",
"business":{"name":"Japan Clothing","type":"clothing"},
"photo":{f7e0f9a0-592a-424a-9d94-8334df7aed2c.jpg},
...//same format of other stores depending on how many there are in my database, this case 21 stores...
 "length":21,"limit":10,"offset":0}

我的CardAdapter:

public class CardAdapter extends RecyclerView.Adapter<CardAdapter.ViewHolder>{



    List<Stores>     mItems;

    public CardAdapter() {
        super();
        mItems = new ArrayList<Stores>();
        Store store = new Store();
        store.setName("get store name from StoreList");
        store.setThumbnail(image from photo in StoreList);
        mItems.add(store);

        ......
    }

    @Override
    public ViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
        View v = LayoutInflater.from(viewGroup.getContext())
                .inflate(R.layout.store_cardview, viewGroup, false);
        ViewHolder viewHolder = new ViewHolder(v);
        return viewHolder;
    }

    @Override
    public void onBindViewHolder(ViewHolder viewHolder, int i) {
        Movie movie = mItems.get(i);
        viewHolder.tvMovie.setText(movie.getName());
        viewHolder.imgThumbnail.setImageResource(store.getThumbnail());
    }

    @Override
    public int getItemCount() {
        return mItems.size();
    }

    class ViewHolder extends RecyclerView.ViewHolder{

        public ImageView imgThumbnail;
        public TextView tvStore;

        public ViewHolder(View itemView) {
            super(itemView);
            imgThumbnail = (ImageView)itemView.findViewById(R.id.img_thumbnail);
            tvStore = (TextView)itemView.findViewById(R.id.tv_store);
        }
    }
}

CardView xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:card_view="http://schemas.android.com/apk/res-auto"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">


<android.support.v7.widget.CardView
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:clickable="true"
    android:background="?android:selectableItemBackground"
    card_view:contentPadding="@dimen/activity_horizontal_margin"
    card_view:cardCornerRadius="20dp"
    card_view:cardElevation="10dp"

>

    <ImageView
        android:id="@+id/img_thumbnail"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
         />

    <TextView
        android:id="@+id/tv_store"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:paddingLeft="@dimen/activity_horizontal_margin"
        android:paddingRight="@dimen/activity_horizontal_margin"
        android:layout_below="@id/img_thumbnail"
        android:layout_gravity="bottom"
        android:gravity="center_vertical"
        android:background="#757575"
        android:alpha="0.8"
        android:textSize="@dimen/abc_text_size_headline_material"
        android:text="Test"/>

</android.support.v7.widget.CardView>

我想要实现的是卡片列表,每张卡片上半部分将包含我因此使用我收到的JSONObject请求GET的图像,并且卡片的下半部分将包含商店的文本,例如名称。我的问题是,如何请求图像并将其从我的片段传递到cardadapter类并将其显示在卡片上?

1 个答案:

答案 0 :(得分:0)

您可以使用Picasso从网址加载图片并在ImageView中显示。例如:Picasso.with(context).load("your_img_url.jpg").into(imageView);

在您的情况下,您可以在适配器内使用Picasso。您只需将图像URL传递给适配器。