【发布时间】:2015-11-08 03:39:27
【问题描述】:
我正在使用选项卡式活动编写应用程序(使用向导创建,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,或特定的 Fragment 类),但无法准确追踪它。是否可以通过 FragmentPagerAdapter 使用几种不同类别的片段?
[1]Android Tabbed Activity: Action Bar Tabs with ViewPager: different layout for each tab
【问题讨论】:
-
在
ExplanationFragment你应该导入v4.app.Fragment -
尝试将片段
import android.app.Fragment;中的这一行更改为导入android.support.v4.app.Fragment
标签: android android-fragments tabs