2

그래서 3 개의 actionbar.Tabs가있는 응용 프로그램에서 3 개의 조각을 전환합니다. 이 두 조각 내에서 약 6 개의 ListView 사이를 전환하는 ViewPager가 필요합니다. 문제는 조각 표시 페이지에서이 작업을 수행하려고하는데 그냥 검은 색으로 표시된다는 것입니다 ... 항상 ... 다른 항목을 표시 할 수 있음을 확인했습니다 (SherlockFragment를 SherlockListFragment로 만들려고했는데 그 안에 데이터를 표시). 따라서이 문제는 내 어댑터와 내 ViewPager에만 국한되며, 그 문제를 해결할 수있는 코드입니다. 아, ActionBarSherlock을 사용하고 ViewPagerIndicator (시도)를 사용하고 있다고 언급해야합니다. 나는 정확하게 수입했다 (마침내).조각 내의 ViewPager가 작동하지 않습니다.

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:weightSum="1" 
    android:id="@+id/linear_layout"> 

    <com.viewpagerindicator.TitlePageIndicator 
     android:id="@+id/titles" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:layout_weight="1.09" /> 

    <android.support.v4.view.ViewPager 
     android:id="@+id/free_time_day_pager" 
     android:layout_width="fill_parent" 
     android:layout_height="284dp" /> 

    <RelativeLayout 
     android:id="@+id/relativeLayout1" 
     android:layout_width="match_parent" 
     android:layout_height="52dp" 
     android:layout_weight="0.07" > 

     <Button 
      android:id="@+id/getScheduleButton" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_alignParentLeft="true" 
      android:layout_centerVertical="true" 
      android:onClick="getScheduleClicked" 
      android:text="@string/get_schedule" /> 

     <Button 
      android:id="@+id/compareWithFriends" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_alignBottom="@+id/getScheduleButton" 
      android:layout_alignParentRight="true" 
      android:layout_toRightOf="@+id/getScheduleButton" 
      android:onClick="compareWithFriendsClicked" 
      android:text="@string/compare_with_a_friend" /> 

    </RelativeLayout> 

</LinearLayout> 

:

import vt.finder.schedule.Course; 
import vt.finder.schedule.Schedule; 
import android.content.Context; 
import android.support.v4.view.PagerAdapter; 
import android.support.v4.view.ViewPager; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.ArrayAdapter; 
import android.widget.ListView; 


/** 
* PageAdapter class, provides functionality for switching between days of 
* the week. 
* 
* 
*/ 
public final class DayAdapter extends PagerAdapter { 

    //~Data Fields----------------------------------------// 
    /** 
    * The list adapter that the current list is being handed to. 
    */ 
    private Schedule schedule; 

    //~Constructors---------------------------------------// 
    public DayAdapter(Schedule theSchedule) { 

     schedule = theSchedule; 
    } 

    //~Methods--------------------------------------------// 
    @Override 
    public Object instantiateItem(ViewGroup container, int index) { 

     ListView view = new ListView(container.getContext()); 

     view.setAdapter(new ArrayAdapter<Course>(container.getContext(), 
         R.layout.list_view_child, schedule.getDay(curIndex).getList())); 

     ((ViewPager) container).addView(view, 0); 

     return container; 
    } 

    @Override 
    public void destroyItem(ViewGroup container, int position, Object object) { 

     ViewPager pager = (ViewPager) container; 
     View view = (View) object; 
     pager.removeView(view); 
    } 

    /** 
    * Gets the pageTitle, which is the name of the day that is at position. 
    * 
    * @param position the index of the day selected. 
    * @return the name of the day the index refers to. 
    */ 
    @Override 
    public CharSequence getPageTitle(int position) { 

     return schedule.getDay(position).getThisDay(); 
    } 

    @Override 
    public int getCount() { 

     return 6; 
    } 

    @Override 
    public boolean isViewFromObject(View view, Object object) { 

     return view == (View) object; 
    } 
} 

여기가 조각 레이아웃 내 xml 파일입니다 : 여기

import vt.finder.schedule.Schedule; 
import android.os.Bundle; 
import android.support.v4.view.ViewPager; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.LinearLayout; 
import com.actionbarsherlock.app.SherlockFragment; 
import com.viewpagerindicator.TitlePageIndicator; 


public class FreeTimeFragment extends SherlockFragment { 

//~Data Fields-------------------------------------------- 
/** 
* Adapter used for swiping between days. 
*/ 
private ViewPager dayPage; 
/** 
* The DayAdapter that is used to switch between course Lists for each day for the listView. 
*/ 
private DayAdapter dayAdapt; 


//~Constructors-------------------------------------------- 
@Override 
public void onCreate(Bundle savedInstanceState) { 

    super.onCreate(savedInstanceState); 
    View view = onCreateView(getLayoutInflater(savedInstanceState), null, savedInstanceState); 

    LinearLayout layout = (LinearLayout) view.findViewById(R.id.linear_layout); 
    dayPage = (ViewPager) layout.findViewById(R.id.free_time_day_pager); 

    Schedule freeTime = getArguments().getParcelable("freeTime"); 

    dayAdapt = new DayAdapter(freeTime); 
    //Bind the title indicator to the adapter 
    TitlePageIndicator titleIndicator = (TitlePageIndicator) layout.findViewById(R.id.titles); 
    dayPage.setAdapter(dayAdapt); 
    titleIndicator.setViewPager(dayPage); 
} 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)  { 

    View view = inflater.inflate(R.layout.free_time_fragment_layout, container, false); 
    return view; 
} 
} 

내 어댑터에 대한 코드입니다 : 그래서 여기

내 조각의 코드입니다 그리고 그 일정에 대해 간단히 언급해야한다고 생각합니다. 수업 목록을 보유하고있는 Day 개체를 보유하고 있습니다. o가 표시됩니다. 모든 코드가 가장 확실하게 작동합니다. 몇 달 동안 사용해 왔습니다.

답변

5

안녕하세요 저는 FragmentPagerAdapter와 함께 갤러리를 만들기 위해 ViewPager를 사용하고있었습니다.

은 내가 오버 헤드를 피하기 위해 뷰를 제거하기 위해 내 FragmentPagerAdapter에

@Override 
     public void destroyItem(ViewGroup container, int position, Object object) { 
      // TODO Auto-generated method stub 

       FragmentManager manager = ((Fragment) object).getFragmentManager(); 
       FragmentTransaction trans = manager.beginTransaction(); 
       trans.remove((Fragment) object); 
       trans.commit(); 

      super.destroyItem(container, position, object); 
     } 

을 추가했습니다.! :-)

관련 문제