web-dev-qa-db-fra.com

android: entrées dans recyclerview

J'ai utilisé listview avec des attributs comme ci-dessous:

<ListView
    Android:layout_width="match_parent"
    Android:layout_height="match_parent"
    Android:entries="@array/fi"/>

Maintenant, je le convertis en RecyclerView

<Android.support.v7.widget.RecyclerView
    Android:id="@+id/rv"
    Android:layout_width="match_parent"
    Android:layout_height="match_parent" />

Je veux savoir si nous avons l'attribut Android:entries dans RecyclerView? Ou tout autre attribut au lieu d'entrées?

37
Ravi Rupareliya

Comme expliqué correctement dans les autres réponses, il n’existe pas d’attribut permettant de remplir RecyclerView à partir de XML. Cependant, en utilisant le Liaison de données Android vous pouvez créer un attribut similaire assez facilement:

<?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>

Voici la définition de l'adaptateur de liaison:

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);
        }
    }
}

Ensuite, vous devez utiliser les méthodes DataBindingUtil pour gonfler la présentation. 

Gonfler à l'intérieur d'une activité:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    DataBindingUtil.setContentView(this, R.layout.content_main);
}

Gonfler à l'intérieur d'un 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();
}
38
rciovati

Je crains que cela ne soit pas possible à l’origine, vous pouvez étendre RecyclerView et définir votre propre attribut personnalisé qui accepte un tableau de chaînes, puis remplir votre adaptateur RecyclerView avec ces valeurs.

Vérifiez ce lien: http://developer.Android.com/training/custom-views/create-view.html#customattr

5
Mina Samy

Non. Il n'y a pas d'attribut directement disponible dans RecyclerView. Vous devez le faire à partir de code Java par programmation en utilisant LayoutManager et RecyclerView.Adapter. Référez-vous cette réponse .

RAISON: Comme nous le savons, RecyclerView ne gonfle pas tant que nous n’avons pas défini une LayoutManager. De plus, LayoutManager est nécessaire pour gonfler les vues individuelles de RecyclerView. Ces vues d'élément individuelles sont extraites du RecyclerView.Adapter. Ainsi, tant que vous n'avez pas défini LayoutManager et RecyclerView.Adapter sur RecyclerView, vous ne pouvez pas utiliser RecyclerView

J'espère que cette réponse vous aidera.

5
Amrut Bidri

Non, sous Android, Recyclerview ne contient pas Android: entrées ou attributs similaires. RecyclerView est le successeur de listview mais il manque toujours l'attribut d'entrées et onclicklistener.

voici le lien de la documentation officielle Android

https://developer.Android.com/reference/Android/support/v7/widget/RecyclerView.html

Ce site décrit également l’attribut Android: entries.

http://androidride.com/easiest-way-make-listview-Android/

0
Mahesh Mahi