我一直在使用Android兼容包但我遇到了以下问题,似乎每当我在我的应用程序上创建一个Fragment作为内部静态类并尝试启动该活动时它会显示以下错误
android.support.v4.app.Fragment$InstantiationException: Unable to instantiate fragment org.wr.CreditCardHolderActivity.CreditCardHolderFragment: make sure class name exists, is public, and has an empty constructor that is public
当我将片段和活动分开时,一切顺利,任何人都知道为什么?我该如何解决?
谢谢!
答案 0 :(得分:7)
如果你有一个内部类片段,如:
public class SomethingFragment extends Fragment {
public static final class TypeFragment extends BaseFragment
{
public static Fragment newInstance()
{
return new TypeFragment();
}
private View mRootView;
private ListView mListView;
/**
* @see android.support.v4.app.Fragment#onCreateView(android.view.LayoutInflater,
* android.view.ViewGroup, android.os.Bundle)
*/
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState)
{
mRootView = inflater.inflate(R.layout.fragment_category_list, container, false);
mListView = (ListView) mRootView.findViewById(R.id.fragment_listview);
return mRootView;
}
}
}
当FragmentActivity尝试重新启动它不会从它将从抽象FragmentActivity处理它的具体类中调用它的片段时,确保你的限定符是 public ,如果你的内部类Fragment是private,Activity没有引用onSaveState,onRestoreState,初始化等。
private
以public
为我修复了它!
<强>更新强>
当尝试从已保存状态(片段被完全销毁的位置)恢复instantiate
时,newInstance()
方法调用Fragment
。
newInstance
方法要求类可公开访问,因此当定义为内部类时,这意味着它必须在public
和static
处适当。
希望这能解决以后的一些问题。