标签: android-fragments

android.app.Fragment和android.support.v4.app.Fragment之间的区别

android.app.Fragment和之间有什么区别android.support.v4.app.Fragment?每种情况应该使用什么?

android android-fragments

173
推荐指数
3
解决办法
8万
查看次数

获取当前片段对象

在我的main.xml

  <FrameLayout
        android:id="@+id/frameTitle"
        android:padding="5dp"
        android:layout_height="wrap_content"
        android:layout_width="fill_parent"
        android:background="@drawable/title_bg">
            <fragment
              android:name="com.fragment.TitleFragment"
              android:id="@+id/fragmentTag"
              android:layout_width="fill_parent"
              android:layout_height="wrap_content" />

  </FrameLayout>
Run Code Online (Sandbox Code Playgroud)

我正在设置像这样的片段对象

FragmentManager fragmentManager = activity.getSupportFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
Fragment newFragment = new FragmentType1();
fragmentTransaction.replace(R.id.frameTitle, casinodetailFragment, "fragmentTag");

// fragmentTransaction.addToBackStack(null);
fragmentTransaction.commit();
Run Code Online (Sandbox Code Playgroud)

FragmentType2,FragmentType3,...在不同的时间设置不同类型的Fragment对象().现在在某个时间点我需要确定当前存在哪个对象.

,我需要做这样的事情:

Fragment currentFragment = //what is the way to get current fragment object in FrameLayout R.id.frameTitle
Run Code Online (Sandbox Code Playgroud)

我尝试了以下内容

TitleFragment titleFragmentById = (TitleFragment) fragmentManager.findFragmentById(R.id.frameTitle);
Run Code Online (Sandbox Code Playgroud)

    TitleFragment titleFragmentByTag = (TitleFragment) fragmentManager.findFragmentByTag("fragmentTag");
Run Code Online (Sandbox Code Playgroud)

但是两个对象(titleFragmentById和titleFragmentByTag)都是null
我错过了什么吗?
我正在使用Compatibility Package, r3和开发API level …

android android-fragments

168
推荐指数
9
解决办法
29万
查看次数

为什么我要避免片段中的非默认构造函数?

我正在使用Fragments其中一个创建一个应用程序,我创建了一个非默认构造函数并得到了这个警告:

Avoid non-default constructors in fragments: use a default constructor plus Fragment#setArguments(Bundle) instead
Run Code Online (Sandbox Code Playgroud)

谁能告诉我为什么这不是一个好主意?

你能否建议我如何做到这一点:

public static class MenuFragment extends ListFragment {
    public ListView listView1;
    Categories category;

    //this is my "non-default" constructor
    public MenuFragment(Categories category){
        this.category = category;
    }....
Run Code Online (Sandbox Code Playgroud)

不使用非默认构造函数?

android android-fragments

168
推荐指数
4
解决办法
8万
查看次数

在片段及其容器活动之间传递数据

如何在片段及其容器活动之间传递数据?是否有类似于通过意图在活动之间传递数据的东西?

我读了这个,但它没有多大帮助:http:
//developer.android.com/guide/topics/fundamentals/fragments.html#CommunicatingWithActivity

android android-fragments

167
推荐指数
7
解决办法
23万
查看次数

片段中的onCreateOptionsMenu

我放在setHasOptionsMenu(true)里面onCreateView,但我仍然无法调用onCreateOptionsMenu内部碎片.

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
                         Bundle savedInstanceState) {   
   setHasOptionsMenu(true);             
   return inflater.inflate(R.layout.facesheet, container, false);
}
Run Code Online (Sandbox Code Playgroud)

以下是我的onCreateOptionsMenu代码.

@Override
public boolean onCreateOptionsMenu(com.actionbarsherlock.view.Menu menu) {
    getSupportMenuInflater().inflate(R.menu.layout, menu);
    return (super.onCreateOptionsMenu(menu));
}
Run Code Online (Sandbox Code Playgroud)

我收到的错误消息:

该方法onCreateOptionsMenu(Menu)类型片段的必须重写或实现的超类型方法.

android android-fragments layout-inflater oncreateoptionsmenu

166
推荐指数
4
解决办法
11万
查看次数

FragmentPagerAdapter仅存在于Android.Support.V4.App(而不是Android.App)中

我在Android.App中找不到找到FragmentPagerAdapter.

我不想使用Android.Support.V4.App中的Fragment,因为我的目标API是14及更高版本(Android 4.0及更高版本).所以,我想使用Android.App.Fragments的平原,以及相关的类.

我只在Android.Support.V4.App中找到它,但这对我来说不够b/c我正在尝试使用Android.App.Fragment(而不是Android.Support.V4.App.Fragment)并且那里Android.App(不是Android.Support.V4.App)中的相关类,如果我从FragmentPagerAdapter派生我的寻呼机(如果它来自支持库),我的代码将无法编译,因为Android.App和Android.Support之间的类型不匹配.V4.App.

就像这里的情况一样无法强制转换为android.app.Fragment,是否有一个"普通"的寻呼机(PagerAdapter)类我应该用它代替FragmentPagerAdapter或其他东西(就像你从普通的Activity派生而来,而不是FragmentActivity,在针对API 11或更高版本时).

下面是我正在使用的示例代码(它来自于https://github.com/xamarin/monodroid-samples/tree/master/Support4上的MonoDroid示例的Support4.sln解决方案中的FragmentPagerSupport.cs文件).

我已经注释掉引用Android.Support.V4.App的行,并用引用Android.App的代码替换它们.我找不到Android.Support.V4.App之外没有FramePagerAdapter,我真的需要它.

谢谢.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using Android.App;
using Android.Content;
using Android.OS;
using Android.Runtime;
using Android.Views;
using Android.Widget;
//using Android.Support.V4.App;
//using Android.Support.V4.View;

namespace Support4
{
    [Activity (Label = "@string/fragment_pager_support")]
    [IntentFilter (new[]{Intent.ActionMain}, Categories = new[]{ "mono.support4demo.sample" })]
    //public class FragmentPagerSupport : FragmentActivity
        public class FragmentPagerSupport : Activity
    {
        const int NUM_ITEMS = 10;
        MyAdapter adapter;
        ViewPager pager;

        protected override void OnCreate (Bundle bundle)
        { …
Run Code Online (Sandbox Code Playgroud)

android xamarin.android android-fragments fragmentpageradapter

163
推荐指数
2
解决办法
5万
查看次数

如何设置DialogFragment的标题?

这应该是一个简单的任务,但由于某种原因,我可以找到一种方法来设置DialogFragment的标题.(我正在使用onCreateView重载设置对话框内容).

默认样式为标题留下了一个位置,但我找不到DialogFragment类的任何方法来设置它.

当该onCreateDialog方法用于设置内容时,标题以某种方式神奇地设置,所以我想知道这是否是设计,或者在使用onCreateView重载时有一个特殊的技巧来设置它.

android android-fragments android-dialogfragment

162
推荐指数
3
解决办法
6万
查看次数

如何使用Fragment进行数据绑定

我正在尝试从官方谷歌文档https://developer.android.com/tools/data-binding/guide.html关注数据绑定示例

除了我试图将数据绑定应用于片段,而不是活动.

编译时我目前得到的错误是

Error:(37, 27) No resource type specified (at 'text' with value '@{marsdata.martianSols}.

onCreate 对于片段看起来像这样:

@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    MartianDataBinding binding = MartianDataBinding.inflate(getActivity().getLayoutInflater());
    binding.setMarsdata(this);
}
Run Code Online (Sandbox Code Playgroud)

onCreateView 对于片段看起来像这样:

@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
    return inflater.inflate(R.layout.martian_data, container, false);
}
Run Code Online (Sandbox Code Playgroud)

我的片段布局文件的部分内容如下所示:

<?xml version="1.0" encoding="utf-8"?>

<layout xmlns:android="http://schemas.android.com/apk/res/android">
    <data>
        <variable
            name="marsdata"
            type="uk.co.darkruby.app.myapp.MarsDataProvider" />
    </data>
...

        <TextView
            android:layout_height="wrap_content"
            android:layout_width="wrap_content"
            android:text="@{marsdata.martianSols}"
        />

    </RelativeLayout>
</layout>
Run Code Online (Sandbox Code Playgroud)

我怀疑是MartianDataBinding不知道它应该绑定哪个布局文件 - 因此错误.有什么建议?

android android-fragments android-databinding

159
推荐指数
10
解决办法
8万
查看次数

一个活动和所有其他碎片

我想实现一个屏幕,Activity和所有其他sreens与Fragmentsmanaging all the fragments thru the activity.

这是个好主意吗?我的答案是否定的,但我仍然想更清楚地了解这个想法.

这个想法的优点和缺点是什么?

注意:

请不要给我片段和活动的链接.

编辑:

这是碎片和活动的一部分:

优点:

  1. 片段旨在与活动一起用作子活动.
  2. 碎片不是活动的替代品.
  3. 碎片意味着可重用性(需要知道可以以何种方式实现可重用性).
  4. 片段是编写代码以支持平板电脑和手机的最佳方式.

缺点:

  1. 我们需要实现接口以从片段中获取数据.
  2. 对于对话,我们必须走很长的路才能展示它.

如果我们不考虑平板电脑,为什么要使用碎片?活动和片段之间的起始时间差是多少?

android android-layout android-lifecycle android-fragments android-activity

157
推荐指数
5
解决办法
6万
查看次数

如何设置DialogFragment的宽度和高度?

我指定我DialogFragment的布局在XML布局文件(让我们称之为layout_mydialogfragment.xml),它layout_widthlayout_height属性,特别是(为100dp每个假设).然后我在DialogFragment的onCreateView(...)方法中扩充这个布局,如下所示:

View view = inflater.inflate(R.layout.layout_mydialogfragment, container, false);
Run Code Online (Sandbox Code Playgroud)

不幸的是,我发现当我的对话框(DialogFragment)出现时,它不尊重layout_widthlayout_height在其xml布局文件中指定(并且我的对话框根据内容收缩或扩展可变).任何人都知道我是否或如何让我的对话框尊重layout_widthlayout_height在其xml布局文件中指定?目前我必须在DialogFragment的onResume()方法中再次指定对话框的宽度和高度,如下所示......

getDialog().getWindow().setLayout(width, height);
Run Code Online (Sandbox Code Playgroud)

...因此,不可取的是,必须记住在两个地方对对话框的宽度和高度进行任何改进.

android android-fragments android-dialog android-dialogfragment

157
推荐指数
15
解决办法
15万
查看次数