2015-09-02 4 views
0

У меня есть следующий класс Fragment:Как получить доступ к набору адаптеров в классе фрагментов?

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 класс

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> 

Когда я работал с activity вместо fragment, тогда весь процесс был очень простым. Я продляю MainActivity класс с ListActivity и добавьте setContentView(R.layout.activity_home); в MainActivity.OnCreate(). Я вижу список изображений в ListView.

Вопрос

Как сделать setListAdapterFragment использовать в классе? Я новичок в Android. Любая помощь будет заметна :)

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

Если я использую ListFragment вместо Fragment затем PagerAdapter класса ОС метательные ошибку.

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' 
+0

@dieter_h Это ошибка компиляции. Просто вставил его –

+1

Несовместимые типы. Существует 2 разных типа фрагментов, проверка импорта. 'import android.support.v4.app.ListFragment;' и \t 'import android.app.ListFragment' [one] (http://developer.android.com/reference/android/app/ListFragment.html) [два] (http://developer.android.com/reference/android/support/v4/app/ListFragment.html) –

ответ

1

Изменение Fragment в 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

+0

Что произойдет с 'activity_home? потому что в классе 'Activity' мне нужно использовать' setContentView (R.layout.activity_home) ' –

+0

Только фрагмент будет изменен. –

+0

вы можете посмотреть в разделе Edit-1 –

Смежные вопросы