Я хочу отобразить изображение из drawable и объединить его с данными из json-api в recylerview

#java #android #android-recyclerview

#java #Android #android-recyclerview

Вопрос:

У меня есть проект приложения для новостных СМИ, использующий программирование на Java, я хочу отображать изображения для категорий из drawable в recylerview, основанные на json-api, есть ли кто-нибудь, кто может мне помочь?

Как я могу загрузить изображение из drawable и объединить его с данными из json-api в RecylerView, может ли кто-нибудь предоставить конкретный код здесь

это мой AdapterCategory.java

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

private List<Category> items = new ArrayList<>();

private Context ctx;
private OnItemClickListener mOnItemClickListener;
private int c;

public interface OnItemClickListener {
    void onItemClick(View view, Category obj, int position);
}

public void setOnItemClickListener(final OnItemClickListener mItemClickListener) {
    this.mOnItemClickListener = mItemClickListener;
}

// Provide a suitable constructor (depends on the kind of dataset)
public AdapterCategory(Context context, List<Category> items) {
    this.items = items;
    ctx = context;
}


public class ViewHolder extends RecyclerView.ViewHolder {
    // each data item is just a string in this case
    public TextView name;
    public TextView post_count;
    public LinearLayout lyt_parent;
    public ImageView imageView;
    public ViewHolder(View v) {
        super(v);
        name = (TextView) v.findViewById(R.id.name);
        post_count = (TextView) v.findViewById(R.id.post_count);
        imageView = (ImageView)v.findViewById(R.id.image_category);
        lyt_parent = (LinearLayout) v.findViewById(R.id.lyt_parent);
        //imageView.setImageResource(image_array.length);
    }
}


@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    // create a new view
    View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.row_category, parent, false);
    ViewHolder vh = new ViewHolder(v);
    return vh;
}

// Replace the contents of a view (invoked by the layout manager)
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, final int position) {
    if(holder instanceof ViewHolder) {
        final Category c = items.get(position);
        ViewHolder vItem = (ViewHolder) holder;
        vItem.name.setText(Html.fromHtml(c.title));
        vItem.post_count.setText(c.post_count   "");
        Picasso.with(ctx).load(imageUri).into(vItem.imageView);
        vItem.lyt_parent.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                if (mOnItemClickListener != null) {
                    mOnItemClickListener.onItemClick(view, c, position);
                }
            }
        });
    }
}

public void setListData(List<Category> items){
    this.items = items;
    notifyDataSetChanged();
}

public void resetListData() {
    this.items = new ArrayList<>();
    notifyDataSetChanged();
}

// Return the size of your dataset (invoked by the layout manager)
@Override
public int getItemCount() {
    return items.size();
}

}
  

Это мой FragmentCategory.java для отображения данных

 public class FragmentCategory extends Fragment {

private View root_view, parent_view;
private RecyclerView recyclerView;
private SwipeRefreshLayout swipe_refresh;
private AdapterCategory mAdapter;

private Call<CallbackCategories> callbackCall = null;

@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    root_view = inflater.inflate(R.layout.fragment_category, null);
    parent_view = getActivity().findViewById(R.id.main_content);

    swipe_refresh = (SwipeRefreshLayout) root_view.findViewById(R.id.swipe_refresh_layout_category);
    recyclerView = (RecyclerView) root_view.findViewById(R.id.recyclerViewCategory);
    recyclerView.setLayoutManager(new GridLayoutManager(getActivity(),3));
    recyclerView.setHasFixedSize(true);

    //set data and list adapter
    mAdapter = new AdapterCategory(getActivity(), new ArrayList<Category>());
    recyclerView.setAdapter(mAdapter);

    // on item list clicked
    mAdapter.setOnItemClickListener(new AdapterCategory.OnItemClickListener() {
        @Override
        public void onItemClick(View v, Category obj, int position) {
            ActivityCategoryDetails.navigate((ActivityMain) getActivity(), v.findViewById(R.id.lyt_parent), obj);
        }
    });

    // on swipe list
    swipe_refresh.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
        @Override
        public void onRefresh() {
            mAdapter.resetListData();
            requestAction();
        }
    });

    requestAction();

    return root_view;
}

private void displayApiResult(final List<Category> categories) {
    mAdapter.setListData(categories);
    swipeProgress(false);
    if (categories.size() == 0) {
        showNoItemView(true);
    }
}

private void requestCategoriesApi() {
    API api = RestAdapter.createAPI();
    callbackCall = api.getAllCategories();
    callbackCall.enqueue(new Callback<CallbackCategories>() {
        @Override
        public void onResponse(Call<CallbackCategories> call, Response<CallbackCategories> response) {
            CallbackCategories resp = response.body();
            if (resp != null amp;amp; resp.status.equals("ok")) {
                displayApiResult(resp.categories);
            } else {
                onFailRequest();
            }
        }

        @Override
        public void onFailure(Call<CallbackCategories> call, Throwable t) {
            if (!call.isCanceled()) onFailRequest();
        }

    });
}

private void onFailRequest() {
    swipeProgress(false);
    if (NetworkCheck.isConnect(getActivity())) {
        showFailedView(true, getString(R.string.failed_text));
    } else {
        showFailedView(true, getString(R.string.no_internet_text));
    }
}

private void requestAction() {
    showFailedView(false, "");
    swipeProgress(true);
    showNoItemView(false);
    new Handler().postDelayed(new Runnable() {
        @Override
        public void run() {
            requestCategoriesApi();
        }
    }, Constant.DELAY_TIME);
}

@Override
public void onDestroy() {
    super.onDestroy();
    swipeProgress(false);
    if(callbackCall != null amp;amp; callbackCall.isExecuted()){
        callbackCall.cancel();
    }
}

private void showFailedView(boolean flag, String message) {
    View lyt_failed = (View) root_view.findViewById(R.id.lyt_failed_category);
    ((TextView) root_view.findViewById(R.id.failed_message)).setText(message);
    if (flag) {
        recyclerView.setVisibility(View.GONE);
        lyt_failed.setVisibility(View.VISIBLE);
    } else {
        recyclerView.setVisibility(View.VISIBLE);
        lyt_failed.setVisibility(View.GONE);
    }
    ((Button) root_view.findViewById(R.id.failed_retry)).setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            requestAction();
        }
    });
}

private void showNoItemView(boolean show) {
    View lyt_no_item = (View) root_view.findViewById(R.id.lyt_no_item_category);
    ((TextView) root_view.findViewById(R.id.no_item_message)).setText(R.string.no_category);
    if (show) {
        recyclerView.setVisibility(View.GONE);
        lyt_no_item.setVisibility(View.VISIBLE);
    } else {
        recyclerView.setVisibility(View.VISIBLE);
        lyt_no_item.setVisibility(View.GONE);
    }
}

private void swipeProgress(final boolean show) {
    if (!show) {
        swipe_refresh.setRefreshing(show);
        return;
    }
    swipe_refresh.post(new Runnable() {
        @Override
        public void run() {
            swipe_refresh.setRefreshing(show);
        }
    });
}
  

И это мой ModeCategory.java

 public class Category implements Serializable {

public int id = -1;
public String slug = "";
public String type = "";
public String url = "";
public String title = "";
public String title_plain = "";
public String content = "";
public String excerpt = "";
public String date = "";
public String modified = "";
public String description = "";
public int parent = -1;
public int post_count = -1;

public Author author;
public List<Category> categories = new ArrayList<>();
public List<Comment> comments = new ArrayList<>();
public List<Attachment> attachments = new ArrayList<>();

public CategoryRealm getObjectRealm(){
    CategoryRealm c = new CategoryRealm();
    c.id = id;
    c.url = url;
    c.slug = slug;
    c.title = title;
    c.description = description;
    c.parent = parent;
    c.post_count = post_count;

    return c;
  }
}
  

Комментарии:

1. Например, какой тип данных вы получаете в json api для изображения? Немного запутался со словом «объединить».

2. я хочу загрузить изображение из Drawable и объединить с recylerview из json-api

3. Я понимаю «загрузить изображение из Drawable», но я думаю, вам следует объяснить «объединить с recylerview из json-api». Потому что то, что вы хотите объединить в recylerview, и то, что из json-api. Извините, но я прошу вас понять, что вам нужно, чтобы я мог помочь вам достичь этого. 🙂