나는 ViewPager
을 처음 사용하지만 사용자가 새 항목을 추가/삭제할 수있는 앱의 초기 화면은 ListView
이며 항목 중 하나를 클릭하면 해당 항목이 " 세부 정보 "조각은 전달 된 ID를 기반으로합니다. 사용자가 목록에서 각 세부 정보로 스 와이프 할 수 있기를 바랍니다.ViewPager 용 조각을 동적으로 생성하기
나는 항상 ID가 1을 벗어나는 것을 제외하고는 ViewPager
이 작동합니다. 이 부분은 ViewPagers
에 대한 이해가 부족한 부분 일 수 있습니다. 그러나 세부 정보 부분의 onCreateView
에 중단 점을 넣으면 앱이로드되고 전달 된 ID가 첫 번째 ID 일 때 중단 점에 도달합니다. 앱이로드 될 때 앱의 ID가 onCreateView
인 앱 스토어에서 ID가 1,2,3,4 인 경우 목록에서 첫 번째 세부 정보 조각까지 처음 스 와이프하면 ID는 2입니다. (내가 1 일 것으로 기대할 때).
이
내가 지금까지 무엇을 가지고 :Main.class가 (이 초기 활성을 응용 프로그램에 시동)
public class Main extends SherlockFragmentActivity
{
private static int NUMBER_OF_PAGES;
private ViewPager mViewPager;
private MyFragmentPagerAdapter mMyFragmentPagerAdapter;
private static List<Fragment> fragments;
@Override
public void onCreate(final Bundle icicle)
{
super.onCreate(icicle);
setContentView(R.layout.main);
mViewPager = (ViewPager)findViewById(R.id.viewpager);
mMyFragmentPagerAdapter = new MyFragmentPagerAdapter(getSupportFragmentManager());
mViewPager.setAdapter(mMyFragmentPagerAdapter);
final List<Integer> ids = GetIds(); //loads ids to popular the viewpager
NUMBER_OF_PAGES = ids.size();
fragments = new ArrayList<Fragment>();
fragments.add(new ListingFragment()); //initial screen
for(Integer id : ids)
fragments.add(DetailsFragment.newInstance(id));
}
private static class MyFragmentPagerAdapter extends FragmentStatePagerAdapter {
public MyFragmentPagerAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int index) {
return fragments.get(index);
}
@Override
public int getCount() {
return NUMBER_OF_PAGES;
}
}
}
DetailsFragment.class을
public class DetailsFragment extends SherlockFragmentActivity
{
private int detailId;
private List<Integer> items;
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
}
@Override
public void onActivityCreated(final Bundle icicle)
{
super.onActivityCreated(icicle);
}
public static DetailsFragment newInstance(int id) {
DetailsFragment lf = new DetailsFragment();
Bundle bundle = new Bundle();
bundle.putInt("id", id);
lf.setArguments(bundle);
return lf;
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.details, container, false);
detailId = getArguments().getInt("id"); //this id is always off
items = GetItems();
return view;
}
}
당신 말이 맞아요. 'ids.size() + 1'을 추가하는 것을 잊어 버렸습니다. 이것은 코드의 차용 버전입니다. 그래서 나는 그것을 질문에 잘못 추가했습니다. 그러나 이것은'ViewPager'와 관련된 모든 코드입니다. 위의 코드가 작동해야한다는 것을 이해합니다. 그럴 경우, ID를 끄는'ViewPager' 외부의 것이어야합니다. –
@KrisB 아직 이해가 안됩니다. ID가 1 씩 나간 것을 어떻게 알 수 있습니까? 로그 문이 있습니까? 프래그먼트 컨텐트가 ID와 오프셋됩니까? 다른 것? – Luksprog
드디어 내 머리가 감싸는 것 같아. 나는 틀렸어, 이드는 꺼지지 않았어, 네가 그걸 묘사 한 것 뿐이야, 내가 스 와이프 할 때, 다음 이드를 실행 중이다. 이런 종류의 또 다른 질문이 생깁니다. 프래그먼트에 초기화 코드를 배치하는 가장 좋은 이벤트는 무엇입니까? onCreate, onCreateView, onResume 또는 onActivityCreated. 나는 'ActionBar' 제목을 설정하고 있지만 너무 일찍 설정되는 것처럼 보입니다. 예를 들어 첫 번째 화면에있을 때 표시되는 제목은'ViewPager '의 다음 화면입니다. –