Search code examples
androidlistviewhorizontal-scrollingvertical-scrolling

I have created a horizontal List view. Now I want this horizontal listview in every item of Vertical List View .How to do this??


Here is my main_activity.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
   xmlns:tools="http://schemas.android.com/tools"
   android:id="@+id/activity_main"
   android:layout_width="match_parent"
   android:layout_height="match_parent"
   tools:context="com.smartrix.horizontal_listview.MainActivity">

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

</RelativeLayout>

Here is my row.xml

<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.CardView
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:orientation="vertical"
  android:layout_margin="12dp"
  android:layout_width="150dp"
  android:layout_height="250dp">

<TextView
    android:id="@+id/title"
    android:textStyle="bold"
    android:textSize="20dp"
    android:textAlignment="center"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"/>

</android.support.v7.widget.CardView>

Here is my mainActivity.java

package com.smartrix.horizontal_listview;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;

import java.util.ArrayList;

public class MainActivity extends AppCompatActivity {

private RecyclerView mRecyclerView;
private RecyclerView.LayoutManager mLayoutManager;
private RecyclerView.Adapter mAdapter;
private ArrayList<String> mDataSet;


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    mDataSet = new ArrayList<>();
    for (int i = 0; i < 20; i++) {
        mDataSet.add("New Title #"+i);
    }

    mRecyclerView = (RecyclerView) findViewById(R.id.recycler_view);
    mRecyclerView.setHasFixedSize(true);
    mLayoutManager = new LinearLayoutManager(this,LinearLayoutManager.HORIZONTAL,false);
    mRecyclerView.setLayoutManager(mLayoutManager);
    mAdapter = new MainAdapter(mDataSet);
    mRecyclerView.setAdapter(mAdapter);
   }
 }

Here is my mainAdapter.java ::

package com.smartrix.horizontal_listview;

import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;

import java.util.ArrayList;

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

private ArrayList<String> mDataSet;

public MainAdapter(ArrayList<String> mDataSet){
    this.mDataSet = mDataSet;
}

@Override
public MainAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    View v = LayoutInflater.from(parent.getContext())
            .inflate(R.layout.row, parent, false);

    ViewHolder vh = new ViewHolder(v);
    return vh;
}

@Override
public void onBindViewHolder(MainAdapter.ViewHolder holder, int position) {
    holder.mTitle.setText(mDataSet.get(position));
}

@Override
public int getItemCount() {
    return mDataSet.size();
}

public class ViewHolder extends RecyclerView.ViewHolder {

    public TextView mTitle;

    public ViewHolder(View itemView) {
        super(itemView);
        mTitle = (TextView) itemView.findViewById(R.id.title);
    }
  }
}

This Code Works Perfectly. Now I want to add this Horizontal ListView in Every ListItem of Vertical ListView. How to do this ??


Solution

  • You would simply add a new Horizontally oriented RecyclerView as an item in your list (and you would add it to your adapter).

    It is fine to nest RelativeViews into each other.

    In your case, add it to your row.xml layout, then inflate it in your mainAdapter.java class