Generally, the recylceLayout is similar to listview and show the same content, however, I wonder are there any way to do like this
1) For odd item , use odd_item.xml layout, and run odd_item action only getView 2) For even, use even_item.xml layout, and run even_item action only in getView
This is the Java,
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
rv = (RecyclerView) inflater.inflate(R.layout.fragment_news_list, container, false);
app = (MyApp) getActivity().getApplication() ;
StringRequest getRequest = new StringRequest(Constant.get_news_list,
new Response.Listener<String>() {
@Override
public void onResponse(String s) {
items = new ArrayList<Item>();
try {
JSONArray json_array = new JSONArray(s);
for (int i = 0; i < json_array.length(); i++) {
JSONObject object = json_array.getJSONObject(i);
items.add(new Item(object.getString("id"), object.getString("title_tw"), object.getString("image_url")));
}
} catch (JSONException e) {
e.printStackTrace();
}
setupRecyclerView(rv);
}
},
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError volleyError) {
Toast.makeText(getActivity(), getResources().getString(R.string.network_err), Toast.LENGTH_LONG).show();
}
});
app.mQueue.add(getRequest);
return rv;
}
private void setupRecyclerView(RecyclerView recyclerView) {
recyclerView.setLayoutManager(new LinearLayoutManager(recyclerView.getContext()));
recyclerView.setAdapter(new SimpleStringRecyclerViewAdapter(getActivity(), items));
}
public static class SimpleStringRecyclerViewAdapter extends RecyclerView.Adapter<SimpleStringRecyclerViewAdapter.ViewHolder> {
private final TypedValue mTypedValue = new TypedValue();
private int mBackground;
private List<Item> mValues;
public static class ViewHolder extends RecyclerView.ViewHolder {
public String id;
public final View mView;
public final ImageView mImageView;
public final TextView mTextView;
public ViewHolder(View view) {
super(view);
mView = view;
mImageView = (ImageView) view.findViewById(R.id.avatar);
mTextView = (TextView) view.findViewById(android.R.id.text1);
}
@Override
public String toString() {
return super.toString() + " '" + mTextView.getText();
}
}
public SimpleStringRecyclerViewAdapter(Context context, List<Item> items) {
context.getTheme().resolveAttribute(R.attr.selectableItemBackground, mTypedValue, true);
mBackground = mTypedValue.resourceId;
mValues = items;
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.news_item_even, parent, false);
view.setBackgroundResource(mBackground);
return new ViewHolder(view);
}
@Override
public void onBindViewHolder(final ViewHolder holder, int position) {
holder.id = mValues.get(position).id;
holder.mTextView.setText(mValues.get(position).name);
holder.mView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Context context = v.getContext();
Intent intent = new Intent(context, DetailActivity.class);
intent.putExtra("id", holder.id);
context.startActivity(intent);
}
});
Glide.with(holder.mImageView.getContext())
.load(Constant.blog_dir + mValues.get(position).img)
.fitCenter()
.into(holder.mImageView);
}
@Override
public int getItemCount() {
return mValues.size();
}
}
How to customized for that? Thanks a lot for helping.