Articles of android fragments

Android:片段无法获得活动

我有一个活动,做一个片段交易 DetailFragment newFragment = new DetailFragment(); transaction.replace(R.id.mylist, newFragment); transaction.addToBackStack(null); transaction.commit(); 工作正常。 现在我知道在我的活动中,我需要在newFragment中的布局中replace一个dynamicstring。 我以为我可以在transaction.commit()之后调用 newFragment.setMyString("my dynamic value"); 并在newFragment.java我有 public void setMyString(String s) { TextView tv = (TextView) getActivity().findViewById(R.id.myobject); tv.setText(s); } 重点是getActivity()返回null。 我怎样才能获得我需要find我的布局元素的上下文? 编辑: 我试图使用一个捆绑的路线,因为这似乎是最干净的方式。 所以我改变了我的代码: Bundle b = new Bundle(); b.putString("text", "my dynamic Text"); DetailFragment newFragment = new DetailFragment(); transaction.replace(R.id.mylist, newFragment); transaction.addToBackStack(null); transaction.commit(); 我的片段onCreateView看起来像这样: public View […]

从片段内部获取父ViewPager视图

我试图从一个片段内访问父视图,但我不知道如何做到这一点。 我需要在片段内的onClick事件之后切换ViewPager上的currentItem。 有任何想法吗? 编辑: 我想访问父视图(ViewPager视图),以便我可以更改currentItem这是可见的,从我的片段之一。

从相机拍摄照片中的照片

在我的Fragment我尝试从我的相机拍照,但我的Fragment onActivityResult不叫。 拍摄照片后,这个Fragment没有显示,正在切换到我的第一个Fragment 。 还有其他的方式来捕捉Fragment照片,或者我做错了什么? 这是我现在的代码: public void takePhoto() { Intent intent = new Intent("android.media.action.IMAGE_CAPTURE"); File photo = new File(Environment.getExternalStorageDirectory(), "Pic.jpg"); intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(photo)); imageUri = Uri.fromFile(photo); PhotosListFragment.this.startActivityForResult(intent, 100); } @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); switch (requestCode) { case 100: if (resultCode == Activity.RESULT_OK) { Uri selectedImage = […]

commitAllowingStateLoss()和commit()片段

我想在networking后台操作后提交一个片段。 我在成功的networking操作之后调用了commit(),但是如果活动进入暂停或停止状态,那么崩溃的应用程序会说IllegalStateexception。 所以我尝试使用commitAllowingStateLoss(),现在工作正常。 我经历了几个博客和文章,它说commitAllowingStateLoss()不好用。 networking操作处理活动暂停和停止状态后处理提交片段的方式是什么?

如何正确隐藏和显示使用新的devise库API的操作栏?

背景 假设我在这个活动中有这些元素: 操作栏(实际上是一个工具栏) 选项卡(使用TabLayout) ViewPager,带有碎片。 每个片段都有ListVIew / RecyclerView。 我希望和许多应用程序具有相同的行为,当滚动时,操作栏将隐藏或显示。 一个很好的例子就是Play商店的滚动function。 像这样的东西(但在ListView当然在片段): 问题 我已经find了“ Android-ObservableScrollView ”库,它显示了如何为多种types的滚动视图做到这一点,但它不处理新的TabLayout使用情况(加上它有问题),如新样本所示,像cheesesquare 。 在devise库的新API(在“cheesesquare”示例中显示)上,它更自动化,因此您不需要创build太多的样板来处理滚动以及如何处理它。 类似的东西: <android.support.v4.widget.DrawerLayout <android.support.design.widget.CoordinatorLayout> <android.support.design.widget.AppBarLayout> <android.support.v7.widget.Toolbar app:layout_scrollFlags="scroll|enterAlways"/> <android.support.design.widget.TabLayout/> </android.support.design.widget.AppBarLayout> <android.support.v4.view.ViewPager app:layout_behavior="@string/appbar_scrolling_view_behavior" /> <android.support.design.widget.FloatingActionButton/> </android.support.design.widget.CoordinatorLayout> <android.support.design.widget.NavigationView/> </android.support.v4.widget.DrawerLayout> 这个请求者承诺,小吃店将在FAB下方,并且根据碎片的内部RecyclerView自动地动作(显示/隐藏)动作栏。 事情是,这似乎只适用于RecyclerView ,而不是与ListView。 由于它们非常复杂,因此将它们转换为RecyclverViews将非常困难。 这个问题 如何使上述机制也适用于ListView呢? 有没有办法做到这一点? 如果是这样,怎么样? 编辑:遗憾的是,谷歌似乎不会支持这种行为的ListView,但只为RecyclerView和NestedScrollView(写在这里 )。 所以我试图使用“ Android-ObservableScrollView ”库,但它有很多滚动问题,包括抛出问题。 现在我决定给Android-ParallaxHeaderViewPager 。 任何人都可以请告诉我如何使它在当前的情况下工作? 这甚至有可能吗? 编辑:我决定转换到RecyclerView毕竟。 然而,我尝试过的所有示例都显示了一个问题:在停止滚动时,操作栏(甚至可能是FAB)可能会被截断,而不是Play商店,在那里它将变成隐藏/显示的animation。 编辑:看来我需要使用setExpanded当有空的onScrollStateChanged。 问题是,如何决定什么时候扩大以及何时崩溃。

dynamic广播接收机在片段

是否有可能dynamic地注册一个广播接收器的片段来监听连接状态的变化? 如果这样怎么样? 如果不是,碎片有什么解决方法? 编辑:注册一个BroadcastReceiver你需要一个上下文。 由于片段存在于活动中,因此获取Context最好的方法就是使用getActivity()。 但是,正如gnorsilva下面所解释的那样,有一些特殊情况需要注意。

VideoView里面的片段导致黑屏拂动

我们有一个在Android API 4.0上运行的Android应用程序。 其中一项活动的布局将屏幕分为两部分。 在左侧,我们有一个静态部分,有一些button。 在右侧,我们有一个FrameLayout将根据按下的button切换到相应的片段。 问题:右侧的一个片段包含一个VideoView。 当用户点击button来显示这个片段时,片段被显示出来,然后video立即开始播放:当渲染这个片段时,完整的屏幕在黑色中闪烁,这是非常烦人的。 这里是VideoFragment类的一些代码: public class VideoFragment extends Fragment { public VideoView videoView; private ExternalVideo mVideo; private boolean mVideoExists; private String mDestination; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); mDestination = ApplicationParams.MEDIA_STORAGE_PATH + "videos/" + FilenameUtils.getBaseName(((DetailActivity)getActivity()).getProduct().getVideoUrl()) + "." + FilenameUtils.getExtension(((DetailActivity) getActivity()).getProduct().getVideoUrl()); File file = new File(mDestination); mVideoExists = file.exists() && […]

ViewPager中的片段视图在恢复时不会恢复

我有ActionBar标签设置。 它由4个选项卡组成。 一切都很好,直到我离开TabbedFragment并返回。 我创build这样的标签: @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); final ActionBar actionBar = getActionBar(); tabs = Lists.newArrayList(); tabs.add(new TabDefinition<>("Tab 1")); tabs.add(new TabDefinition<>("Tab 2")); tabs.add(new TabDefinition<>("Tab 3")); tabs.add(new TabDefinition<>("Tab 4")); for (TabDefinition tab : tabs) { actionBar.addTab(actionBar.newTab() .setText(tab.text) .setTag(tab.tag) .setTabListener(this)); } } 并像这样初始化适配器: @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { return […]

如何从DialogFragment获取数据到片段?

想象一下,我有从我开始DialogFragment FragmentA (有框中的EditText )。 如何从EditText获取值到FragmentA ? 我试图做出这样的事情,但这并不成功。

执行AsyncTask时被replace的碎片 – getActivity()上的NullPointerException

我最近将我的活动转换为碎片。 使用类似于Tab-Navigation的东西,片段在用户select另一个标签时被replace。 片段填充后,我至less启动一个AsyncTask从互联网上获取一些信息。 但是 – 如果用户切换到另一个选项卡,就像正在执行AsyncTask中的doBackground-method一样 – 片段被replace ,因此我在标记的行中得到一个NullPointerExceptionexception: @Override protected Object doInBackground(Object… params) { … String tempjson = helper.SendPost(getResources().getText(R.string.apiid)); //ERROR: Fragment not attached … } protected onPostExecute(Object result) { … getActivity().getContentResolver() //NULLPOINTEREXCEPTION getView().findViewById(R.id.button) //NULL … } getActivity()和getResources()导致错误,因为我的碎片被replace。 我试过的东西: 在我的AsyncTask上调用cancel方法(不会修正第一个错误,也不会修复执行onPostExecute()片段被replace的第二个错误) 检查getActivity()是否为null或调用this.isDetached() (不是一个真正的修复,我需要检查它,每当我调用getActivity()等) 所以我的问题是:什么是最好的摆脱这些AsyncTask问题? 我没有使用活动的这些问题,因为他们没有“杀死”/分离标签更改(这导致更高的内存使用量 – 之所以我喜欢切换到碎片)