0

I have a ListView in which the elements appear vertically and I want them to appear horizontally.
How do I do this?

from MyFragment.java

private static final String[] MyArray = new String[] { "Id", "Type", "Name"};

@Override
public void onViewCreated(View view, Bundle savedInstanceState) {

      final Activity thisActivity = getActivity();
      final ListView listview = (ListView)thisActivity.findViewById(R.id.my_listview);

      final List<String> list = Arrays.asList(MyArray);

      final MyListAdapter adapter = new MyListAdapter(this.getActivity(), R.layout.row_layout, list);
      listview.setAdapter(adapter);
 }

fragment.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal"
    android:background="#000000" >

<ListView
    android:id="@+id/my_listview"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" /> 

</RelativeLayout>

row_layout.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:orientation="horizontal">

    <TextView
        android:id="@+id/id"
        android:textColor="#FFFFFF"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="30sp" >
    </TextView>

    <TextView
        android:id="@+id/type"
        android:textColor="#FFFFFF"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="30sp" >
    </TextView>

    <TextView
        android:id="@+id/name"
        android:textColor="#FFFFFF"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="30sp" >
    </TextView>

</LinearLayout> 

MyListAdapter.java

public class MyListAdapter extends ArrayAdapter<String> {

    public final static int ID = 0;
    public static final int TYPE =  1;
    public static final int NAME = 2;

    private final Context context;
    private final List<String> stringList;

    public MyListAdapter(Context context,  int textViewResourceId, List<String> values) {
        super(context, textViewResourceId, values);
        this.context = context;
        this.stringList = values;
}

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {

        LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        View rowView = inflater.inflate(R.layout.row_layout, parent, false);

        // need to get correct textView based on position
        TextView textView = null;
        switch (position) {
            case ID:
                textView = (TextView) rowView.findViewById(R.id.id);
                break;
            case TYPE:
                textView = (TextView) rowView.findViewById(R.id.type);
                break;
            case NAME:
                textView = (TextView) rowView.findViewById(R.id.name);
                break;
        }

        textView.setText(stringList.get(position));

        return rowView;
    }

    @Override
    public int getCount() {
        return stringList.size();
    }

    @Override
    public String getItem(int position) {
        return stringList.get(position);
    }

}
Al Lelopath
  • 6,448
  • 13
  • 82
  • 139

2 Answers2

2

It's impossible to show ListView items horizontally with the ListView from the Android API. But there are libraries, which make it possible (just search "Horizontal ListView"). But you can do this with the new RecyclerView.

smb
  • 834
  • 1
  • 8
  • 17
2

Hi try using this Horizontal List View, i use this one in all my proyects, its a very good one!

Horizontal ListView

JpCrow
  • 4,881
  • 4
  • 32
  • 46