I have used listview
with entries attribute like below :
<ListView android:layout_width="match_parent" android:layout_height="match_parent" android:entries="@array/fi"/>
Now i am converting it to RecyclerView
<android.support.v7.widget.RecyclerView android:id="@+id/rv" android:layout_width="match_parent" android:layout_height="match_parent" />
I want to know whether we have android:entries
attribute in RecyclerView
? Or any other attribute instead of entries?
As correctly explained in the other answers there isn't an attribute to fill the RecyclerView from xml. However using the Android Databinding you can create a similar attribute quite easily:
<?xml version="1.0" encoding="utf-8"?> <layout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto"> <android.support.v7.widget.RecyclerView android:layout_width="match_parent" android:layout_height="match_parent" app:entries="@{@stringArray/fi}" app:layoutManager="android.support.v7.widget.LinearLayoutManager"/> </layout>
Here the binding adapter definition:
import android.databinding.BindingAdapter; public class RecyclerViewBindings { @BindingAdapter("entries") public static void entries(RecyclerView recyclerView, String[] array) { recyclerView.setAdapter(new SimpleArrayAdapter(array)); } static class SimpleArrayAdapter extends RecyclerView.Adapter<SimpleHolder> { private final String[] mArray; public SimpleArrayAdapter(String[] array) { mArray = array; } @Override public SimpleHolder onCreateViewHolder(ViewGroup parent, int viewType) { final LayoutInflater inflater = LayoutInflater.from(parent.getContext()); final View view = inflater.inflate(android.R.layout.simple_list_item_1, parent, false); return new SimpleHolder(view); } @Override public void onBindViewHolder(SimpleHolder holder, int position) { holder.mTextView.setText(mArray[position]); } @Override public int getItemCount() { return mArray.length; } } static class SimpleHolder extends RecyclerView.ViewHolder { private final TextView mTextView; public SimpleHolder(View itemView) { super(itemView); mTextView = (TextView) itemView.findViewById(android.R.id.text1); } } }
Then you have to use the DataBindingUtil
methods for inflate the layout.
Inflate inside an Activity:
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); DataBindingUtil.setContentView(this, R.layout.content_main); }
Inflate inside a Fragment:
@Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { ContentMainBinding bindings = DataBindingUtil.inflate(inflater, R.layout.content_main, container, false); return bindings.getRoot(); }
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With