不能包含要在选项卡式 activity 中使用的片段。使用 FragmentPagerAdapter 的不同片段
Can't include a fragment to use in a tabbed activity. Different fragments with FragmentPagerAdapter
我正在使用选项卡 activity 编写一个应用程序(使用向导创建,Android Studio 1.4.1)。我在尝试将自己的片段放入第二个选项卡时遇到麻烦。对于下面的代码,行(如 [1] 中所建议的)
fragment = new ExplanationFragment();
导致以下错误:类型不兼容。要求:android.support.v4.app.Fragment。发现:...ExplanationFragment。我也试过了
fragment = ExplanationFragment.newInstance;
结果相同
public class SectionsPagerAdapter extends FragmentPagerAdapter {
public SectionsPagerAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int position) {
// getItem is called to instantiate the fragment for the given page.
// Return a PlaceholderFragment (defined as a static inner class below).
// return PlaceholderFragment.newInstance(position);
Fragment fragment = null;
switch (position) {
case 1:
fragment = new ExplanationFragment();
break;
default:
fragment = PlaceholderFragment.newInstance(position);
break;
}
return fragment;
}
片段本身是使用向导创建的:
package ...;
import android.app.Activity;
import android.net.Uri;
import android.os.Bundle;
import android.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
public class ExplanationFragment extends Fragment {
private static final String ARG_PARAM1 = "param1";
private static final String ARG_PARAM2 = "param2";
private OnFragmentInteractionListener mListener;
public static ExplanationFragment newInstance(String param1, String param2) {
ExplanationFragment fragment = new ExplanationFragment();
Bundle args = new Bundle();
return fragment;
}
public ExplanationFragment() {
// Required empty public constructor
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
return inflater.inflate(R.layout.fragment_explanation_fragment, container, false);
}
public void onButtonPressed(Uri uri) {
if (mListener != null) {
mListener.onFragmentInteraction(uri);
}
}
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
try {
mListener = (OnFragmentInteractionListener) activity;
} catch (ClassCastException e) {
throw new ClassCastException(activity.toString()
+ " must implement OnFragmentInteractionListener");
}
}
@Override
public void onDetach() {
super.onDetach();
mListener = null;
}
public interface OnFragmentInteractionListener {
// TODO: Update argument type and name
public void onFragmentInteraction(Uri uri);
}
}
我实际上希望解决方案位于完全不同的地方(一些 xml 可能,或者特定的片段 class),但无法精确地找到它。是否可以将几个不同的 class 片段与 FragmentPagerAdapter 一起使用?
[1]
只需尝试将片段中的这一行更改为 import android.app.Fragment;
以导入 android.support.v4.app.Fragment
causes following error: Incompatible types. Required: android.support.v4.app.Fragment. Found: ...ExplanationFragment
那说明你继承自错误的 class。
片段有两种实现方式:一种是从 API 级别 11 开始内置于 Android 中,另一种来自 Android 支持库。欢迎您使用其中任何一种,但您必须 一致 ,至少在一个 activity 内(尽管我建议在整个应用程序中保持一致)。你不能做的是混合和匹配片段实现。
SectionsPagerAdapter
继承自 android.support.v4.app.FragmentPagerAdapter
。它正在使用片段反向端口。
ExplanationFragment
继承自 android.app.Fragment
。它正在使用原生片段。因此,你不一致。
假设您的 ViewPager
之前只使用一个选项卡,最简单的答案是让 ExplanationFragment
继承自 android.support.v4.app.Fragment
,因此您一直在使用片段向后移植。
我正在使用选项卡 activity 编写一个应用程序(使用向导创建,Android Studio 1.4.1)。我在尝试将自己的片段放入第二个选项卡时遇到麻烦。对于下面的代码,行(如 [1] 中所建议的)
fragment = new ExplanationFragment();
导致以下错误:类型不兼容。要求:android.support.v4.app.Fragment。发现:...ExplanationFragment。我也试过了
fragment = ExplanationFragment.newInstance;
结果相同
public class SectionsPagerAdapter extends FragmentPagerAdapter {
public SectionsPagerAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int position) {
// getItem is called to instantiate the fragment for the given page.
// Return a PlaceholderFragment (defined as a static inner class below).
// return PlaceholderFragment.newInstance(position);
Fragment fragment = null;
switch (position) {
case 1:
fragment = new ExplanationFragment();
break;
default:
fragment = PlaceholderFragment.newInstance(position);
break;
}
return fragment;
}
片段本身是使用向导创建的:
package ...;
import android.app.Activity;
import android.net.Uri;
import android.os.Bundle;
import android.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
public class ExplanationFragment extends Fragment {
private static final String ARG_PARAM1 = "param1";
private static final String ARG_PARAM2 = "param2";
private OnFragmentInteractionListener mListener;
public static ExplanationFragment newInstance(String param1, String param2) {
ExplanationFragment fragment = new ExplanationFragment();
Bundle args = new Bundle();
return fragment;
}
public ExplanationFragment() {
// Required empty public constructor
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
return inflater.inflate(R.layout.fragment_explanation_fragment, container, false);
}
public void onButtonPressed(Uri uri) {
if (mListener != null) {
mListener.onFragmentInteraction(uri);
}
}
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
try {
mListener = (OnFragmentInteractionListener) activity;
} catch (ClassCastException e) {
throw new ClassCastException(activity.toString()
+ " must implement OnFragmentInteractionListener");
}
}
@Override
public void onDetach() {
super.onDetach();
mListener = null;
}
public interface OnFragmentInteractionListener {
// TODO: Update argument type and name
public void onFragmentInteraction(Uri uri);
}
}
我实际上希望解决方案位于完全不同的地方(一些 xml 可能,或者特定的片段 class),但无法精确地找到它。是否可以将几个不同的 class 片段与 FragmentPagerAdapter 一起使用?
[1]
只需尝试将片段中的这一行更改为 import android.app.Fragment;
以导入 android.support.v4.app.Fragment
causes following error: Incompatible types. Required: android.support.v4.app.Fragment. Found: ...ExplanationFragment
那说明你继承自错误的 class。
片段有两种实现方式:一种是从 API 级别 11 开始内置于 Android 中,另一种来自 Android 支持库。欢迎您使用其中任何一种,但您必须 一致 ,至少在一个 activity 内(尽管我建议在整个应用程序中保持一致)。你不能做的是混合和匹配片段实现。
SectionsPagerAdapter
继承自 android.support.v4.app.FragmentPagerAdapter
。它正在使用片段反向端口。
ExplanationFragment
继承自 android.app.Fragment
。它正在使用原生片段。因此,你不一致。
假设您的 ViewPager
之前只使用一个选项卡,最简单的答案是让 ExplanationFragment
继承自 android.support.v4.app.Fragment
,因此您一直在使用片段向后移植。