Questions tagged «android-fragments»

片段代表Android应用程序中可重用的行为或部分用户界面。

30
片段中的findViewById
我试图在一个Fragment中创建一个ImageView,该ImageView引用我在Fragment的XML中创建的ImageView元素。但是,该findViewById方法仅在我扩展Activity类时才有效。无论如何,我也可以在Fragment中使用它吗? public class TestClass extends Fragment { public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { ImageView imageView = (ImageView)findViewById(R.id.my_image); return inflater.inflate(R.layout.testclassfragment, container, false); } } 该findViewById方法上有一个错误,指出该方法未定义。

30
片段中未调用onActivityResult
onActivityResult相机活动返回时,承载此片段的活动将被调用。 我的片段通过为相机发送照片的意图启动了一个结果活动。图片应用程序可以正常加载,拍照并返回。该onActivityResult然而,永远不会打。我已经设置了断点,但是什么也没有触发。碎片可以onActivityResult吗?我想是这样,因为它是提供的功能。为什么不触发此操作? ImageView myImage = (ImageView)inflatedView.findViewById(R.id.image); myImage.setOnClickListener(new OnClickListener() { @Override public void onClick(View view) { Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); startActivityForResult(cameraIntent, 1888); } }); @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { if( requestCode == 1888 ) { Bitmap photo = (Bitmap) data.getExtras().get("data"); ((ImageView)inflatedView.findViewById(R.id.image)).setImageBitmap(photo); } }

14
困境:何时使用片段与活动:
我知道这Activities是为了代表我的应用程序的一个屏幕,而Fragments设计的它们是设计为可重用的UI布局,其中嵌入了逻辑。 直到不久前,我还开发了一个应用程序,因为它说应该进行开发。我创建了一个Activity来代表我的应用程序的屏幕,并将Fragments用于ViewPager或Google Maps。我很少创建ListFragment可以重复使用多次的UI或其他UI。 最近,我偶然发现了一个仅包含2 Activities个的项目,一个是SettingsActivity,另一个是MainActivity。的布局中MainActivity填充了许多隐藏的全屏UI片段,仅显示了一个。在Activity逻辑上有很多FragmentTransitions上,应用程序的不同屏幕之间。 我喜欢这种方法的原因在于,因为应用程序使用ActionBar,所以它保持不变并且不会随着屏幕切换动画而移动,Activity切换一样。这使这些屏幕过渡更加流畅。 因此,我想我想问的是与您分享有关此主题的当前开发方式,我知道乍一看它看起来像是一个基于意见的问题,但我将其视为一个Android设计和体系结构问题。基于意见的。 UPDATE(2014年5月1日):在此之后呈现由埃里克·伯克从广场,(这是我不得不说是一个有很多的Android开发人员有用的工具,一个伟大的演示和我没有以任何方式广场相关) http://www.infoq.com/presentations/Android-Design/ 根据过去几个月的经验,我发现构建应用程序的最佳方法是创建片段组,以代表应用程序中的流程并将所有这些片段组合在一起Activity。因此,基本上Activities,您的应用程序中的流数将与流数相同。这样,动作栏在所有流程的屏幕上都保持不变,但是在更改流程时会重新创建,这很有意义。正如埃里克·伯克(Eric Burke)所言,以及我已经逐渐意识到的那样,尽可能少使用哲学Activities并不适用于所有情况,因为这在他所谓的“上帝”活动中造成了混乱。

23
如何确定片段何时在ViewPager中可见
问题:片段onResume()在ViewPager之前的片段变成实际可见被激发。 例如,我有2个带有ViewPager和的片段FragmentPagerAdapter。第二个片段仅适用于授权用户,我需要让用户在该片段可见时登录(使用警报对话框)。 但是,ViewPager当第一个片段可见时,它会创建第二个片段,以便缓存第二个片段,并在用户开始滑动时使其可见。 因此,onResume()事件早在它可见之前就在第二个片段中触发。这就是为什么我试图找到一个事件,该事件在第二个片段变得可见时触发,并在适当的时候显示一个对话框。 如何才能做到这一点?

13
实例化新的Android片段的最佳做法
我已经看到了两种在应用程序中实例化新Fragment的常规做法: Fragment newFragment = new MyFragment(); 和 Fragment newFragment = MyFragment.newInstance(); 第二个选项使用静态方法newInstance(),通常包含以下方法。 public static Fragment newInstance() { MyFragment myFragment = new MyFragment(); return myFragment; } 最初,我认为主要的好处是可以在创建Fragment的新实例时重载newInstance()方法以提供灵活性-但我也可以通过为Fragment创建重载的构造函数来做到这一点。 我错过了什么? 一种方法比另一种方法有什么好处?还是只是好的做法?

30
在片段中使用上下文
如何获取片段中的上下文? 我需要用我的数据库其构造函数采用的背景下,但getApplicationContext()并FragmentClass.this没有工作,所以我能做些什么? 数据库构造函数 public Database(Context ctx) { this.context = ctx; DBHelper = new DatabaseHelper(context); }

30
IllegalStateException:使用ViewPager在onSaveInstanceState之后无法执行此操作
我从市场上的应用程序中获取用户报告,但出现以下异常: java.lang.IllegalStateException: Can not perform this action after onSaveInstanceState at android.app.FragmentManagerImpl.checkStateLoss(FragmentManager.java:1109) at android.app.FragmentManagerImpl.popBackStackImmediate(FragmentManager.java:399) at android.app.Activity.onBackPressed(Activity.java:2066) at android.app.Activity.onKeyUp(Activity.java:2044) at android.view.KeyEvent.dispatch(KeyEvent.java:2529) at android.app.Activity.dispatchKeyEvent(Activity.java:2274) at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchKeyEvent(PhoneWindow.java:1803) at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1112) at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1112) at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1112) at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchKeyEvent(PhoneWindow.java:1855) at com.android.internal.policy.impl.PhoneWindow.superDispatchKeyEvent(PhoneWindow.java:1277) at android.app.Activity.dispatchKeyEvent(Activity.java:2269) at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchKeyEvent(PhoneWindow.java:1803) at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1112) at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1112) at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1112) at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1112) at android.widget.TabHost.dispatchKeyEvent(TabHost.java:297) at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1112) at …

10
ViewPager和片段—存储片段状态的正确方法是什么?
片段对于将UI逻辑分为一些模块来说似乎非常好。但是随着ViewPager它的生命周期,我仍然迷茫。因此,非常需要大师的想法! 编辑 请参阅下面的愚蠢解决方案;-) 范围 主要活动有一个ViewPager带有片段。这些片段可以为其他(子主)活动实现一些不同的逻辑,因此片段的数据通过活动内部的回调接口填充。并且所有功能在首次启动时都正常,但是! 问题 重新创建活动时(例如,在方向更改时),ViewPager的片段也是如此。代码(您将在下面找到)说,每次创建活动时,我都会尝试创建一个ViewPager与片段相同的新片段适配器(也许是问题所在),但是FragmentManager已经将所有这些片段存储在某个地方(哪里?),并且为这些人启动娱乐机制。因此,重新创建机制通过我的回调接口调用“旧的”片段的onAttach,onCreateView等,以通过Activity的实现方法来初始化数据。但是此方法指向通过Activity的onCreate方法创建的新创建的片段。 问题 也许我使用的是错误的模式,但即使是Android 3 Pro书籍也没有太多相关信息。因此,请给我一两次拳,并指出正确的方法。非常感谢! 码 主要活动 public class DashboardActivity extends BasePagerActivity implements OnMessageListActionListener { private MessagesFragment mMessagesFragment; @Override protected void onCreate(Bundle savedInstanceState) { Logger.d("Dash onCreate"); super.onCreate(savedInstanceState); setContentView(R.layout.viewpager_container); new DefaultToolbar(this); // create fragments to use mMessagesFragment = new MessagesFragment(); mStreamsFragment = new StreamsFragment(); // …

6
如何正确将片段的实例状态保存在后堆栈中?
我在SO上发现了许多类似问题的实例,但不幸的是,没有答案符合我的要求。 我对人像和风景有不同的布局,并且我使用的是后向堆栈,这既阻止了我的使用,setRetainState()又使用了配置更改例程的技巧。 我在TextViews中向用户显示某些信息,这些信息不会保存在默认处理程序中。当仅使用“活动”编写我的应用程序时,以下方法运行良好: TextView vstup; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.whatever); vstup = (TextView)findViewById(R.id.whatever); /* (...) */ } @Override public void onSaveInstanceState(Bundle state) { super.onSaveInstanceState(state); state.putCharSequence(App.VSTUP, vstup.getText()); } @Override public void onRestoreInstanceState(Bundle state) { super.onRestoreInstanceState(state); vstup.setText(state.getCharSequence(App.VSTUP)); } 使用Fragments,这仅在非常特殊的情况下有效。具体来说,令人震惊的是替换片段,将其放回堆栈中,然后在显示新片段时旋转屏幕。据我了解,旧片段onSaveInstanceState()在被替换时不会收到调用,但仍以某种方式保持链接,Activity而当该方法View不再存在时,稍后会调用此方法,因此将我TextView的任何结果都查找到中NullPointerException。 另外,我发现即使TextViews使用Fragments也可以,但Activity对s 保持引用不是一个好主意。在这种情况下,onSaveInstanceState()实际上可以保存状态,但是如果在隐藏片段时旋转屏幕两次,问题就会再次出现,因为onCreateView()在新实例中不会调用该片段。 我想到了将状态保存onDestroyView()到一些Bundle-type类成员元素中(实际上是更多数据,而不仅仅是一个TextView)并保存到其中,onSaveInstanceState()但还有其他缺点。首先,如果该片段是当前显示,调用两个函数的顺序是相反的,所以我需要考虑两种不同的情况。必须有一个更清洁,正确的解决方案!

10
为什么要使用片段,以及何时使用片段代替活动?
在Android API 11+中,Google发布了一个名为的新类Fragment。 Google在视频中建议,在可能的情况下(link1,link2),我们应该使用片段而不是活动,但它们并没有确切说明原因。 片段的目的是什么以及它们的可能用途(除了一些可以通过简单的视图/布局轻松实现的UI示例)? 我的问题是关于片段的: 使用片段的目的是什么? 与使用活动/视图/布局相比,使用片段的优缺点是什么? 奖励问题: 您能为片段提供一些非常有趣的用途吗?Google在影片中没有提及的内容? 在片段和包含片段的活动之间进行交流的最佳方式是什么? 使用片段时要记住的最重要的事情是什么?您的经验中有任何提示和警告吗?


30
如何获取当前显示的片段?
我正在玩Android中的片段。 我知道我可以使用以下代码来更改片段: FragmentManager fragMgr = getSupportFragmentManager(); FragmentTransaction fragTrans = fragMgr.beginTransaction(); MyFragment myFragment = new MyFragment(); //my custom fragment fragTrans.replace(android.R.id.content, myFragment); fragTrans.addToBackStack(null); fragTrans.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE); fragTrans.commit(); 我的问题是,在Java文件中,如何获取当前显示的Fragment实例?

18
如何在片段中使用XML onClick处理按钮单击
蜂窝前(Android 3),每个活动均已注册,以通过onClickLayout的XML中的标签处理按钮单击: android:onClick="myClickMethod" 在该方法中,您可以使用view.getId()和switch语句执行按钮逻辑。 随着Honeycomb的引入,我将这些活动分解为片段,可以在许多不同的活动中重用这些片段。按钮的大多数行为是独立于活动的,我希望代码驻留在Fragments文件中,而无需使用OnClickListener为每个按钮注册的旧方法(1.6版之前)。 final Button button = (Button) findViewById(R.id.button_id); button.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { // Perform action on click } }); 问题是,当我的布局膨胀时,仍然是托管活动正在接收按钮点击,而不是单个片段。是否有一个好的方法 注册片段以接收按钮点击? 将点击事件从“活动”传递到它们所属的片段?

19
如何在Android中将选项菜单添加到片段
我正在尝试从一组片段中将一个项目添加到选项菜单。 我创建了一个新MenuFragment类,并将其扩展为希望包含菜单项的片段。这是代码: Java: public class MenuFragment extends Fragment { MenuItem fav; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setHasOptionsMenu(true); } public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { fav = menu.add("add"); fav.setIcon(R.drawable.btn_star_big_off); } } 科特林: class MenuFragment : Fragment { lateinit var fav: MenuItem override fun onCreate(savedInstanceState: Bundle) { super.onCreate(savedInstanceState) setHasOptionsMenu(true) …

11
片段MyFragment未附加到活动
我创建了一个小测试应用程序来代表我的问题。我正在使用ActionBarSherlock来实现带有(Sherlock)Fragments的选项卡。 我的代码: TestActivity.java public class TestActivity extends SherlockFragmentActivity { private ActionBar actionBar; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setupTabs(savedInstanceState); } private void setupTabs(Bundle savedInstanceState) { actionBar = getSupportActionBar(); actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); addTab1(); addTab2(); } private void addTab1() { Tab tab1 = actionBar.newTab(); tab1.setTag("1"); String tabText = "1"; tab1.setText(tabText); tab1.setTabListener(new TabListener<MyFragment>(TestActivity.this, "1", …

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.