我有一个Fragment带有多个参数的构造函数.我的应用程序在开发期间工作正常,但在生产中我的用户有时会看到此崩溃:
android.support.v4.app.Fragment$InstantiationException: Unable to instantiate fragment
make sure class name exists, is public, and has an empty constructor that is public
Run Code Online (Sandbox Code Playgroud)
我可以创建一个空的构造函数,因为这个错误消息建议,但这对我没有意义,因为那时我将不得不调用一个单独的方法来完成设置Fragment.
我很好奇为什么这种崩溃偶尔会发生.也许我使用ViewPager不正确?我Fragment自己实例化所有s并将它们保存在一个列表中Activity.我不使用FragmentManager事务,因为ViewPager我看到的例子并不需要它,并且一切似乎都在开发期间工作.
我来自iOS,这很容易,你只需使用UIViewController.然而,在Android中,事情看起来要复杂得多,某些UIComponents用于特定的API级别.我正在阅读BigNerdRanch for Android(这本书大约有2年了),他们建议我Activity用来托管我的FragmentActivities.但是,我认为Activity已被弃用.
因此,对于API级别22(对API级别15或16的最低支持),我应该使用什么来托管组件以及组件本身?是否有所有这些用途,或者我应该几乎完全使用一两个?
android android-fragments android-activity android-actionbaractivity appcompatactivity
我使用的是ViewPager连同FragmentStatePagerAdapter主办三个不同的片段:
当我想Fragment1从ViewPager在FragmentActivity.
有什么问题,我该如何解决?
我将我的Android应用程序移植到了蜂窝状态,然后为了使用碎片我做了一个大的重构.在我之前的版本中,当我按下Home按钮时,我曾经做过一次ACTIVITY_CLEAR_TOP以重置后台堆栈.
现在我的应用程序只是一个包含多个片段的Activity,因此当我按下Home按钮时,我只需替换其中的一个片段.如何清除,而不必使用我的背部栈startActivity与ACTIVITY_CLEAR_TOP标志?
谷歌建议我们使用DialogFragment而不是简单Dialog的使用Fragments API,但使用隔离DialogFragment的简单的是 - 否确认消息框是荒谬的.在这种情况下,最佳做法是什么?
android android-fragments android-dialog android-dialogfragment
我正在使用DialogFragments做很多事情:从列表中选择项目,输入文本.
将值(即字符串或列表中的项)返回给调用活动/片段的最佳方法是什么?
目前我正在制作调用活动实现DismissListener,并为DialogFragment提供对活动的引用.然后,Dialog调用OnDimissactivity中的方法,activity将从DialogFragment对象中获取结果.非常混乱,因为DialogFragment失去对活动的引用,它不能用于配置更改(方向更改).
谢谢你的帮助.
我正在处理碎片并遇到两件事情Activity,FragmentActivity并且已经使用了好几次.我想知道这两者之间有什么区别,因为当我改变Activity时FragmentActivity,它对应用程序没有任何影响.
android android-fragments android-fragmentactivity android-support-library
我想将一个片段添加到以编程方式实现其布局的Activity.我查看了Fragment文档,但没有很多示例描述我需要的内容.这是我尝试编写的代码类型:
public class DebugExampleTwo extends Activity {
private ExampleTwoFragment mFragment;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
FrameLayout frame = new FrameLayout(this);
if (savedInstanceState == null) {
mFragment = new ExampleTwoFragment();
FragmentTransaction ft = getFragmentManager().beginTransaction();
ft.add(frame.getId(), mFragment).commit();
}
setContentView(frame);
}
}
Run Code Online (Sandbox Code Playgroud)
...
public class ExampleTwoFragment extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater,
ViewGroup container,
Bundle savedInstanceState) {
Button button = new Button(getActivity());
button.setText("Hello There");
return button;
}
}
Run Code Online (Sandbox Code Playgroud)
此代码编译但在开始时崩溃,可能是因为我FragmentTransaction.add()的错误.这样做的正确方法是什么?
假设我有一个以编程方式添加了片段的活动:
private void animateToFragment(Fragment newFragment, String tag) {
FragmentTransaction ft = getFragmentManager().beginTransaction();
ft.replace(R.id.fragment_container, newFragment, tag);
ft.addToBackStack(null);
ft.commit();
}
Run Code Online (Sandbox Code Playgroud)
返回到可见的上一个片段的最佳方法是什么?
我在Android按钮点击时发现了Trigger后退按钮功能,但我认为模拟后退键事件不是正确的方法(我也无法让它工作):
dispatchKeyEvent(new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_BACK));
Run Code Online (Sandbox Code Playgroud)
打电话finish()只关闭我不感兴趣的活动.
有没有更好的方法来解决这个问题?
下面是我的代码,3 Fragment classes每个代码都嵌入了3个选项卡中的每一个ViewPager.我有一个菜单选项.如图所示onOptionsItemSelected(),通过选择一个选项,我需要更新当前可见的片段.要更新,我必须调用片段类中的方法.有人可以建议如何调用该方法吗?
public class MainActivity extends ActionBarActivity {
ViewPager ViewPager;
TabsAdapter TabsAdapter;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
ViewPager = new ViewPager(this);
ViewPager.setId(R.id.pager);
setContentView(ViewPager);
final ActionBar bar = getSupportActionBar();
bar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
//Attaching the Tabs to the fragment classes and setting the tab title.
TabsAdapter = new TabsAdapter(this, ViewPager);
TabsAdapter.addTab(bar.newTab().setText("FragmentClass1"),
FragmentClass1.class, null);
TabsAdapter.addTab(bar.newTab().setText("FragmentClass2"),
FragmentClass2.class, null);
TabsAdapter.addTab(bar.newTab().setText("FragmentClass3"),
FragmentClass3.class, null);
if (savedInstanceState != null) {
bar.setSelectedNavigationItem(savedInstanceState.getInt("tab", 0));
}
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch …Run Code Online (Sandbox Code Playgroud)