当我们有文件名并且在资产文件夹中时如何设置Image In Adapter?

时间:2016-07-11 12:54:33

标签: android listview android-recyclerview android-adapter

我有图像文件名,并希望在我的布局中设置适配器,因为我正在使用回收视图。

{
  "formules": [
    {
      "title": "Freecharge",
      "imageName": "freerecharge.jpg",
      "description": "Get 3% Cashback on Bill Payments of `50 or more + Extra 1.2% Cashback from us",
      "expiry_date": "Valid till 12 Jul 2016"
    },
    {
      "title": "Airtel",
      "imageName": "airtel.jpg",
      "description": "Flat 5% OFF on Airtel postpaid bill payments & Airtel prepaid recharges made through Airtel Money + Upto 3.85% Cashback from",
      "expiry_date": "Valid till 31 Jul 2016"
    },
    {
      "title": "Cleartrip",
      "imageName": "ctrip.jpg",
      "description": "Flat 25% Cashback on Domestic Hotels + Upto `340 Cashback from us",
      "expiry_date": "Valid till 15 Jul 2016"
    },
    {
      "title": "FirstCry",
      "imageName": "fcry.jpg",
      "description": "Flat `400 OFF on order of `1100 from The Premium Store (For First Purchase) + Upto `40 Cashback from us",
      "expiry_date": "Valid till 31 Jul 2016"
    },
    {
      "title": "Dominos Pizza",
      "imageName": "dominoz.jpg",
      "description": "Buy 1 & Get 50% OFF on 2nd Pizza + Extra `29 Cashback from us",
      "expiry_date": "Valid till 31 Jul 2016"
    },
    {
      "title": "Lenskart",
      "imageName": "lenkart.jpg",
      "description": "Get your First Frame FREE + Upto `360 Cashback from us",
      "expiry_date": "Valid till 31 Jul 2016"
    },
    {
      "title": "Infibeam",
      "imageName": "infibeam.jpg",
      "description": "Upto 60% OFF plus Extra 10% OFF on Best-Selling Books worth `200 + Upto 7% Cashback from us",
      "expiry_date": "Valid till 20 Jul 2016"
    },
    {
      "title": "Indiatimes Shopping",
      "imageName": "itimeshoping.jpg",
      "description": "Shop for Multimedia Phones at `499 + Upto `250 Cashback from us",
      "expiry_date": "Valid till 31 Jul 2016"
    },
    {
      "title": "ExcitingLives",
      "imageName": "exiting.jpg",
      "description": "Sound And Light Camera Keychain at `399 + Extra `105 Cashback from us",
      "expiry_date": "Valid till 31 Jul 2016"
    },
    {
      "title": "Babyoye",
      "imageName": "baboye.jpg",
      "description": "End Of Season Sale - Buy 5 & Get 50% OFF on Maternity wear + Upto `410 Cashback from us",
      "expiry_date": "Valid till 31 Jul 2016"
    },
    {
      "title": "Ferns N Petals",
      "imageName": "frennPetals.jpg",
      "description": "Flat 18% OFF Sitewide + Upto 13% Cashback from us",
      "expiry_date": "Valid till 30 Sep 2016"
    }
  ]
} 

主要类别在哪里采取行动

public class CashBackFragments extends Fragment {
    private RecyclerView recyclerView;
    private MyRecyclerAdapter mAdapter;
    RecyclerView.LayoutManager mLayoutManager;

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View rootView = inflater.inflate(R.layout.cash_back_screen, container, false);
        ((HomeActivity) getActivity()).setTitle("Cash Back Offers");
        recyclerView = (RecyclerView) rootView.findViewById(R.id.recycler_view);
        recyclerView.setHasFixedSize(true);
        mLayoutManager = new LinearLayoutManager(getActivity());
        recyclerView.setLayoutManager(mLayoutManager);
        ArrayList<HashMap<String, String>> rows = new CommonFunction(getActivity()).getData("cashBackList.json", "title", "imageName", "description", "expiry_date");
        ArrayList<FeedItem> rowItems = new ArrayList<>();
        for (int i = 0; rows.size() > i; i++) {
            FeedItem item = new FeedItem(rows.get(i).get("title"),
                    rows.get(i).get("imageName"),
                    rows.get(i).get("description"),
                    rows.get(i).get("expiry_date"));
            rowItems.add(item);
        }
        mAdapter = new MyRecyclerAdapter(rowItems,getActivity());
        recyclerView.setAdapter(mAdapter);
        RecyclerView.ItemDecoration itemDecoration =
                new DividerItemDecoration(getActivity(), LinearLayoutManager.VERTICAL);
        recyclerView.addItemDecoration(itemDecoration);
        return rootView;
    }

    @Override
    public void onPause() {
        super.onPause();
        ((HomeActivity) getActivity()).setTitle("Dashboard");
    }
}

我的Adapter类如下:

public class MyRecyclerAdapter extends RecyclerView.Adapter<MyRecyclerAdapter.MyViewHolder> {

    private List<FeedItem> dataList;
    Context context;

    public MyRecyclerAdapter(ArrayList<FeedItem> rowItems, FragmentActivity activity) {
        this.dataList = rowItems;
        context = activity;
    }

    public class MyViewHolder extends RecyclerView.ViewHolder {
        public TextView title;
        public TextView description;
        public TextView expiry_date;
        public ImageView img_cashback;

        public MyViewHolder(View view) {
            super(view);
            title = (TextView) view.findViewById(R.id.title);
            description = (TextView) view.findViewById(R.id.txt_description);
            expiry_date = (TextView) view.findViewById(R.id.expiry_date);
            img_cashback = (ImageView) view.findViewById(R.id.img_cashback);
        }
    }

    @Override
    public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View itemView = LayoutInflater.from(parent.getContext())
                .inflate(R.layout.cash_back_list, parent, false);
        return new MyViewHolder(itemView);
    }

    @Override
    public void onBindViewHolder(MyViewHolder holder, int position) {
    FeedItem data = dataList.get(position);
    holder.title.setText(data.getTitle());
    holder.description.setText(data.getDescription());
    holder.expiry_date.setText(data.getExpiryDate());
    int id = context.getResources().getIdentifier("com.rayz.digitalpostbox:drawable/" + data.getImageName(), null, null);
    holder.img_cashback.setImageResource(id);
}

和FeedItem类如下:

public class FeedItem {
    private String title, imageName, description, expiryDate;

    public FeedItem(String title, String imageName, String description, String expiryDate) {
        this.title = title;
        this.imageName = imageName;
        this.description = description;
        this.expiryDate = expiryDate;
    }

    public String getExpiryDate() {
        return expiryDate;
    }

    public void setExpiryDate(String expiryDate) {
        this.expiryDate = expiryDate;
    }

    public String getDescription() {

        return description;
    }

    public void setDescription(String description) {
        this.description = description;
    }

    public String getImageName() {

        return imageName;
    }

    public void setImageName(String imageName) {
        this.imageName = imageName;
    }

    public String getTitle() {

        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }
}


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

问题是我无法在Adpater图像视图中设置图像。我的布局屏幕如下:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="?android:attr/selectableItemBackground"
    android:clickable="true"
    android:focusable="true"
    android:orientation="vertical"
    android:paddingBottom="10dp"
    android:paddingLeft="16dp"
    android:paddingRight="16dp"
    android:paddingTop="10dp">

    <TextView
        android:id="@+id/title"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginBottom="20dp"
        android:gravity="center"
        android:text="@string/app_name"
        android:textSize="18sp"
        android:textStyle="bold" />

    <ImageView
        android:id="@+id/img_cashback"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@id/title"
        android:layout_centerHorizontal="true"
        android:layout_marginBottom="20dp"
        android:contentDescription="@string/app_name"
        android:src="@drawable/freerecharge" />

    <TextView
        android:id="@+id/txt_description"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/btn_cash_back"
        android:layout_alignStart="@+id/btn_cash_back"
        android:layout_below="@id/img_cashback"
        android:layout_marginBottom="20dp"
        android:text="@string/txt_name_demo"
        android:textSize="16sp" />

    <TextView
        android:id="@+id/expiry_date"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/btn_cash_back"
        android:layout_alignStart="@+id/btn_cash_back"
        android:layout_below="@id/txt_description"
        android:layout_marginBottom="20dp"
        android:text="@string/txt_date_demo"
        android:textSize="16sp" />

    <Button
        android:id="@id/btn_cash_back"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@id/expiry_date"
        android:layout_centerInParent="true"
        android:background="@color/colorLine"
        android:paddingEnd="20dp"
        android:paddingLeft="20dp"
        android:paddingRight="20dp"
        android:paddingStart="20dp"
        android:text="@string/txt_cash_back"
        android:textColor="@color/colorWhite"
        android:textSize="18sp" />

</RelativeLayout>

2 个答案:

答案 0 :(得分:0)

为什么不使用Picasso来加载图片。将使你的工作变得轻松。

加载像这样的资产文件夹图像

Picasso.with(context).load("file:///android_asset/"+data.getImageName()).into(holder.img_cashback);

将其放在您的recycleview适配器的onBindViewHolder中。

来自here

的来源

答案 1 :(得分:0)

我正在做愚蠢的错误,因为在我的json数据文件中我做错了文件名模式。我必须将其编辑为:

{
  "formules": [
    {
      "title": "Freecharge",
      "imageName": "freerecharge",
      "description": "Get 3% Cashback on Bill Payments of `50 or more + Extra 1.2% Cashback from us",
      "expiry_date": "Valid till 12 Jul 2016"
    },
    {
      "title": "Airtel",
      "imageName": "airtel",
      "description": "Flat 5% OFF on Airtel postpaid bill payments & Airtel prepaid recharges made through Airtel Money + Upto 3.85% Cashback from",
      "expiry_date": "Valid till 31 Jul 2016"
    },
    {
      "title": "Cleartrip",
      "imageName": "ctrip",
      "description": "Flat 25% Cashback on Domestic Hotels + Upto `340 Cashback from us",
      "expiry_date": "Valid till 15 Jul 2016"
    },
    {
      "title": "FirstCry",
      "imageName": "fcry",
      "description": "Flat `400 OFF on order of `1100 from The Premium Store (For First Purchase) + Upto `40 Cashback from us",
      "expiry_date": "Valid till 31 Jul 2016"
    },
    {
      "title": "Dominos Pizza",
      "imageName": "dominoz",
      "description": "Buy 1 & Get 50% OFF on 2nd Pizza + Extra `29 Cashback from us",
      "expiry_date": "Valid till 31 Jul 2016"
    },
    {
      "title": "Lenskart",
      "imageName": "lenkart",
      "description": "Get your First Frame FREE + Upto `360 Cashback from us",
      "expiry_date": "Valid till 31 Jul 2016"
    },
    {
      "title": "Infibeam",
      "imageName": "infibeam",
      "description": "Upto 60% OFF plus Extra 10% OFF on Best-Selling Books worth `200 + Upto 7% Cashback from us",
      "expiry_date": "Valid till 20 Jul 2016"
    },
    {
      "title": "Indiatimes Shopping",
      "imageName": "itimeshoping",
      "description": "Shop for Multimedia Phones at `499 + Upto `250 Cashback from us",
      "expiry_date": "Valid till 31 Jul 2016"
    },
    {
      "title": "ExcitingLives",
      "imageName": "exiting",
      "description": "Sound And Light Camera Keychain at `399 + Extra `105 Cashback from us",
      "expiry_date": "Valid till 31 Jul 2016"
    },
    {
      "title": "Babyoye",
      "imageName": "baboye",
      "description": "End Of Season Sale - Buy 5 & Get 50% OFF on Maternity wear + Upto `410 Cashback from us",
      "expiry_date": "Valid till 31 Jul 2016"
    },
    {
      "title": "Ferns N Petals",
      "imageName": "frennPetals",
      "description": "Flat 18% OFF Sitewide + Upto 13% Cashback from us",
      "expiry_date": "Valid till 30 Sep 2016"
    }
  ]
}

并在Adapter中设置为:

 int id = context.getResources().getIdentifier(data.getImageName(), "drawable",
                context.getPackageName());
        holder.img_cashback.setImageResource(id);

现在可以在适配器中设置图像。

@Amylinn感谢您的考虑。