처음으로 안드로이드에서 프래그먼트를 시험하고 있는데,이 경우에는 유한 개수의 프래그먼트를 위해 FragmentPagerAdapter를 사용하고 있습니다. 유일한 문제는 내가 스 와이프하면, 두 번째 및 세 번째 페이지로 이동하지만, 다른 프레젠테이션 대신 매번 첫 번째 조각에 대한 레이아웃을 보여줍니다.FragmentActivity가 프래그먼트의 올바른 레이아웃을 표시하지 않음
MainActivity.java :
package com.example.swipetabtest;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.v4.view.ViewPager.OnPageChangeListener;
import android.widget.Toast;
public class MainActivity extends FragmentActivity {
FragmentPagerAdapter adapterViewPager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ViewPager vpPager = (ViewPager) findViewById(R.id.vpPager);
adapterViewPager = new MyPagerAdapter(getSupportFragmentManager());
vpPager.setAdapter(adapterViewPager);
}
public static class MyPagerAdapter extends FragmentPagerAdapter {
private static int NUM_ITEMS = 3;
public MyPagerAdapter(FragmentManager fragmentManager) {
super(fragmentManager);
}
// Returns total number of pages
@Override
public int getCount() {
return NUM_ITEMS;
}
// Returns the fragment to display for that page
@Override
public Fragment getItem(int position) {
switch (position) {
case 0:
return FirstFragment.newInstance(0, "Page # 1");
case 1:
return SecondFragment.newInstance(1, "Page # 2");
case 2:
return ThirdFragment.newInstance(2, "Page # 3");
default:
return null;
}
}
}
}
FirstFragment.java
package com.practice.swipetabtest;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
public class FirstFragment extends Fragment {
// Store instance variables
private String title;
private int page;
// newInstance constructor for creating fragment with arguments
public static FirstFragment newInstance(int page, String title) {
FirstFragment fragmentFirst = new FirstFragment();
Bundle args = new Bundle();
args.putInt("someInt", page);
args.putString("someTitle", title);
fragmentFirst.setArguments(args);
return fragmentFirst;
}
// Store instance variables based on arguments passed
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
page = getArguments().getInt("someInt", 0);
title = getArguments().getString("someTitle");
}
// Inflate the view for the fragment based on layout XML
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_first, container, false);
return view;
}
}
SecondFragment.java
package com.practice.swipetabtest;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
public class SecondFragment extends Fragment {
// Store instance variables
private String title;
private int page;
// newInstance constructor for creating fragment with arguments
public static FirstFragment newInstance(int page, String title) {
FirstFragment fragmentFirst = new FirstFragment();
Bundle args = new Bundle();
args.putInt("someInt", page);
args.putString("someTitle", title);
fragmentFirst.setArguments(args);
return fragmentFirst;
}
// Store instance variables based on arguments passed
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
page = getArguments().getInt("someInt", 1);
title = getArguments().getString("someTitle");
}
// Inflate the view for the fragment based on layout XML
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_second, container, false);
return view;
}
}
ThirdFragment.java
package com.practice.swipetabtest;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
public class ThirdFragment extends Fragment {
// Store instance variables
private String title;
private int page;
// newInstance constructor for creating fragment with arguments
public static FirstFragment newInstance(int page, String title) {
FirstFragment fragmentFirst = new FirstFragment();
Bundle args = new Bundle();
args.putInt("someInt", page);
args.putString("someTitle", title);
fragmentFirst.setArguments(args);
return fragmentFirst;
}
// Store instance variables based on arguments passed
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
page = getArguments().getInt("someInt", 2);
title = getArguments().getString("someTitle");
}
// Inflate the view for the fragment based on layout XML
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_third, container, false);
return view;
}
}
,536,913,632 10
activity_main.xml :
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<android.support.v4.view.ViewPager
android:id="@+id/vpPager"
android:layout_width="match_parent"
android:layout_height="wrap_content">
</android.support.v4.view.ViewPager>
</LinearLayout>
fragment_first.xml :
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<TextView
android:text="this is the first fragment"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
</LinearLayout>
fragment_second.xml :
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<TextView
android:text="this is the second fragment"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>
fragment_third.xml :
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<TextView
android:text="hey look a third fragment"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>
나는 올바른 레이아웃이 프래그먼트마다 부 풀릴 것인지 스위치 문이 올바른 프래그먼트로 감싸는 것인지 등의 명백한 일들을 확인하려고 노력했다. 그러나 그들은 너무 좋아 보인다 ...
그러나 첫 번째 조각 . 당신이 당신의 FirstFragment, SecondFragment 및 ThirdFragment 클래스 instantiateFragment 방법, 당신은 실제로 모두 세에 FirstFragment의 새로운 인스턴스를 생성하는로 살펴 경우
나는 그것이 명백한 무엇을 알았습니다 ... FirstFragment.java에서 복사하여 붙여 넣기 만하고 올바른 유형을 반환하지 않기 위해 이름을 바꾸지 않았습니다 ... 감사합니다.) – user2405469
@ user2405469 환영합니다! Copy & Waste가 더 적절한 설명입니다. 나는 단지 복사/붙여 넣기 문제로 밝혀지기 위해 뭔가를 고치려고 몇 시간을 잃어 버렸을 때 몇 가지 나쁜 경험 때문에 코드 또는 XML을 더 이상 정확하게 붙여 넣지 않습니다. – Matej
@Matej ...당신은 맞습니다. 코딩 경험에서 일찍이 조언을 듣고 습관에서 벗어날 것입니다. – user2405469