android.app.Fragment和之间有什么区别android.support.v4.app.Fragment?每种情况应该使用什么?
在我的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 …
我正在使用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)
不使用非默认构造函数?
如何在片段及其容器活动之间传递数据?是否有类似于通过意图在活动之间传递数据的东西?
我读了这个,但它没有多大帮助:http:
//developer.android.com/guide/topics/fundamentals/fragments.html#CommunicatingWithActivity
我放在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
我在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
这应该是一个简单的任务,但由于某种原因,我可以找到一种方法来设置DialogFragment的标题.(我正在使用onCreateView重载设置对话框内容).
默认样式为标题留下了一个位置,但我找不到DialogFragment类的任何方法来设置它.
当该onCreateDialog方法用于设置内容时,标题以某种方式神奇地设置,所以我想知道这是否是设计,或者在使用onCreateView重载时有一个特殊的技巧来设置它.
我正在尝试从官方谷歌文档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不知道它应该绑定哪个布局文件 - 因此错误.有什么建议?
我想实现一个屏幕,Activity和所有其他sreens与Fragments和managing all the fragments thru the activity.
这是个好主意吗?我的答案是否定的,但我仍然想更清楚地了解这个想法.
这个想法的优点和缺点是什么?
注意:
请不要给我片段和活动的链接.
编辑:
这是碎片和活动的一部分:
优点:
缺点:
如果我们不考虑平板电脑,为什么要使用碎片?活动和片段之间的起始时间差是多少?
android android-layout android-lifecycle android-fragments android-activity
我指定我DialogFragment的布局在XML布局文件(让我们称之为layout_mydialogfragment.xml),它layout_width和layout_height属性,特别是(为100dp每个假设).然后我在DialogFragment的onCreateView(...)方法中扩充这个布局,如下所示:
View view = inflater.inflate(R.layout.layout_mydialogfragment, container, false);
Run Code Online (Sandbox Code Playgroud)
不幸的是,我发现当我的对话框(DialogFragment)出现时,它不尊重layout_width和layout_height在其xml布局文件中指定(并且我的对话框根据内容收缩或扩展可变).任何人都知道我是否或如何让我的对话框尊重layout_width和layout_height在其xml布局文件中指定?目前我必须在DialogFragment的onResume()方法中再次指定对话框的宽度和高度,如下所示......
getDialog().getWindow().setLayout(width, height);
Run Code Online (Sandbox Code Playgroud)
...因此,不可取的是,必须记住在两个地方对对话框的宽度和高度进行任何改进.
android android-fragments android-dialog android-dialogfragment
android ×10