Android nested recycliewiew

I am trying to display a nested recyclerview, but the children are not showing. I want to display different elements in the whole child view. I am not getting an error, but the view is not updating.

Here is my code can help.

thanks

public class MainActivity extends ActionBarActivity { RecyclerView recyclerView; RootAdapter adapter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); adapter = new RootAdapter(this); recyclerView = (RecyclerView) findViewById(R.id.recyclerRoot); recyclerView.setLayoutManager(new LinearLayoutManager(this)); recyclerView.setAdapter(adapter); } private class RootAdapter extends RecyclerView.Adapter<RootAdapter.RootViewHolder> { private final LayoutInflater inflater; String[] _items = new String[]{"ITEM 1", "ITEM 2", "ITEM 3", "ITEM 4"}; public RootAdapter(Context context) { inflater = LayoutInflater.from(context); } @Override public RootViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) { View view = inflater.inflate(R.layout.root_row, viewGroup, false); RootViewHolder rvi = new RootViewHolder(view); return rvi; } @Override public void onBindViewHolder(RootViewHolder rootViewHolder, int i) { rootViewHolder.txtRootLine.setText(_items[i]); rootViewHolder.recyclerViewChild.setLayoutManager(new LinearLayoutManager(inflater.getContext())); rootViewHolder.recyclerViewChild.setAdapter(new ChildAdapter(inflater)); } @Override public int getItemCount() { return _items.length; } class RootViewHolder extends RecyclerView.ViewHolder { TextView txtRootLine; RecyclerView recyclerViewChild; public RootViewHolder(View itemView) { super(itemView); txtRootLine = (TextView) itemView.findViewById(R.id.txtRootLine); recyclerViewChild = (RecyclerView) itemView.findViewById(R.id.recyclerChild); } } } private class ChildAdapter extends RecyclerView.Adapter<ChildAdapter.ChildViewHolder> { private LayoutInflater _inflater; String[] _childItems = new String[]{"child 1", "child 2", "child 2"}; public ChildAdapter(LayoutInflater inflater) { _inflater = inflater; } @Override public ChildViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) { View view = _inflater.inflate(R.layout.child_row, viewGroup, false); ChildViewHolder rvi = new ChildViewHolder(view); return rvi; } @Override public void onBindViewHolder(ChildViewHolder childViewHolder, int i) { childViewHolder.txtChildLine.setText(_childItems[i]); } @Override public int getItemCount() { return _childItems.length; } public class ChildViewHolder extends RecyclerView.ViewHolder { TextView txtChildLine; public ChildViewHolder(View itemView) { super(itemView); txtChildLine = (TextView) itemView.findViewById(R.id.txtChildLine); } } } activity_main.xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="main text"/> <android.support.v7.widget.RecyclerView xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/recyclerRoot" android:layout_width="match_parent" android:layout_height="wrap_content"> </android.support.v7.widget.RecyclerView> </LinearLayout> root_row.xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <TextView android:id="@+id/txtRootLine" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <android.support.v7.widget.RecyclerView xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/recyclerChild" android:layout_width="match_parent" android:layout_height="wrap_content"> </android.support.v7.widget.RecyclerView> </LinearLayout> child_row.xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <TextView android:id="@+id/txtChildLine" android:layout_width="wrap_content" android:layout_height="wrap_content" /> </LinearLayout> 
+6
source share
4 answers

The existing layout manager does not yet support content wrapping. Test it by assigning a fixed height to your recyclerChild and a view will appear.

As a solution to this problem, you can create a new LayoutManager that extends the existing one and overrides the onMeasure method to measure the contents of the shell.

+2
source

I solved this problem recently. You can fulfill the accepted answer here:

fooobar.com/questions/117662 / ...

You must implement your own linearlayout

+2
source

In Android Support Library 23.2, support libraries are 23.2.0. Thus, all WRAP_CONTENT should work correctly.

Update the library version in the gradle file.

 compile 'com.android.support:recyclerview-v7:23.2.0' 
0
source

RecyclerView does not support wrap_content. Set some value in the recycler sub view, such as 200dp, and your element will display. More discussion here

-1
source

Source: https://habr.com/ru/post/983398/


All Articles