Search code examples
javaandroidandroid-layoutandroid-fragmentspicasso

How to access setAdapter in Fragment class?


I have a following Fragment class:

public class TabFragment extends Fragment {
  ....
 @Override
 public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) 
   {
     View view =  inflater.inflate(R.layout.fragment_photos_tab, container, false);
     TabelAdapter adapt = new TabelAdapter(getActivity().getApplicationContext(), R.layout.list_room_view, flowerList);
     setListAdapter(adapt);     // Not Working because class is not extended by ListActivity
     return view;
   }

TabelAdapter class

public class TabelAdapter extends ArrayAdapter<Flower> {

 @Override
 public View getView(int position, View convertView, ViewGroup parent) {
   LayoutInflater inflater = (LayoutInflater) context.getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
   if (null == convertView) {
        convertView = inflater.inflate(R.layout.list_flower_view, parent, false);
    }
    Picasso
            .with(context)
            .load("http://i.imgur.com/rFLNqWI.jpg")
            .fit()
            .into((ImageView) convertView);
    return convertView;
}

list_flower_view.xml

<?xml version="1.0" encoding="utf-8"?>

<ImageView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/Flowerimg"
    android:layout_width="match_parent"
    android:layout_height="200dp"/>

activity_home.xml

 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
android:layout_height="match_parent" tools:context=".MainActivity">

<ListView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@android:id/list"></ListView>
</RelativeLayout>

When I was working with activity instead of fragment then the whole process was very simple. I extend MainActivity class with ListActivity and add setContentView(R.layout.activity_home); into MainActivity.OnCreate(). I can see the list of Images in ListView.

Question

How to make setListAdapter usable in Fragment class? I am newbie in Android. Any help will be appreciable :)

Edit-1

public class PagerAdapter extends FragmentStatePagerAdapter {
int mNumOfTabs;

public PagerAdapter(FragmentManager fm, int NumOfTabs) {
    super(fm);
    this.mNumOfTabs = NumOfTabs;
}

@Override
public Fragment getItem(int position) {

    switch (position) {
        case 0:
            TabFragment photo = new TabFragment();
            return photo;  // Line (30,24)
  }        ......
 }

If I use ListFragment instead of Fragment then PagerAdapter class os throwing an Error.

Error:(30, 24) error: incompatible types: TabFragment cannot be converted to Fragment

Edit-2

java.lang.RuntimeException: Your content must have a ListView whose id attribute is 'android.R.id.list'

Solution

  • Change Fragment to ListFragment:

     public class TabFragment extends ListFragment {
    
    @Override
          public void onActivityCreated(Bundle savedInstanceState) {
            super.onActivityCreated(savedInstanceState);
            TabelAdapter adapt = new TabelAdapter(getActivity().getApplicationContext(), R.layout.list_room_view, flowerList);
            setListAdapter(adapt);
           }
         ...
        }
    

    ListFragment documentation

    Tutorial