我已经在我的应用程序片段中为商店列表创建了一个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类并将其显示在卡片上?
答案 0 :(得分:0)
您可以使用Picasso从网址加载图片并在ImageView
中显示。例如:Picasso.with(context).load("your_img_url.jpg").into(imageView);
在您的情况下,您可以在适配器内使用Picasso。您只需将图像URL传递给适配器。