我有以下布局:
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<fragment
class="com.xamarin.recipes.filepicker.FileListFragment"
android:id="@+id/FileListFragment"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</FrameLayout>
之后我试图访问Activity中的FileListFragment:
var fileListFragment = SupportFragmentManager.FindFragmentById(Resource.Id.FileListFragment);
但是我得到了#34;未知标识符:fileListFragment&#34;在Watches for fileListFragment
更新
活动代码:
using Android.Support.V4.App;
using Android.OS;
namespace com.xamarin.recipes.filepicker
{
[Android.App.Activity(Label = "Choose file", MainLauncher = true, Icon = "@drawable/icon")]
public class FilePickerActivity : FragmentActivity
{
protected override void OnCreate(Bundle bundle)
{
base.OnCreate(bundle);
SetContentView(Resource.Layout.ChooseAudio);
var fileListFragment = (FileListFragment)SupportFragmentManager.FindFragmentById(Resource.Id.FileListFragment);
}
}
}
答案 0 :(得分:2)
我目前没有使用Xamarin,但我取消删除我的答案,因为我认为我接近解决方案,这可以帮助你。我找到了几个使用Xamarin的教程或GitHub项目。这些搜索没有给我正确的解决方案,但我认为它们为我提供了解决问题的线索。试试这段代码:
using Android.App;
using Android.OS;
using Android.Support.V4.App;
// using Fragment = Android.Support.V4.App.Fragment;
namespace com.xamarin.recipes.filepicker
{
[Activity(Label = "Choose file", MainLauncher = true, Icon = "@drawable/icon")]
public class FilePickerActivity : FragmentActivity
{
// use Android.Support.V4.App.Fragment below
private FileListFragment mFileListFragment;
protected override void OnCreate(Bundle bundle)
{
base.OnCreate(bundle);
SetContentView(Resource.Layout.ChooseAudio);
mFileListFragment = (FileListFragment)SupportFragmentManager.FindFragmentById(Resource.Id.fileListFragment);
// Avoid any confusion: change its id in your layout by "fileListFragment"
}
}
}
我使用片段类var
更改了使用Android.Support.V4.App.Fragment
未定义的FileListFragment
,因为错误显示:未知标识符。
注意:请确保FileListFragment
扩展Android.Support.V4.App.Fragment
,如下所示:
public class FileListFragment : Android.Support.V4.App.Fragment
{
...
}
要使用var
,我猜您需要通过as Android.Support.V4.App.Fragment
(比较器)进行转换,如下所示:
var fileListFragment = SupportFragmentManager
.FindFragmentById(Resource.Id.fileListFragment)
as FileListFragment; // you need this line
答案 1 :(得分:1)
试试这段代码。我不确定,但我认为它应该有用。
var fileListFragment = SupportFragmentManager.FindFragmentById<FileListFragment>(Resource.Id.FileListFragment);
答案 2 :(得分:0)
使用此:
getSupportFragmentManager()
.findFragmentById(R.id.FileListFragment))
答案 3 :(得分:0)
您是否尝试过像这样的片段
Fragment fileListFragment = SupportFragmentManager.findFragmentById(R.id.FileListFragment);
答案 4 :(得分:0)
你已经知道你尝试过的方法不会起作用,所以我不会再说一遍了。 请注意,Fragment的视图无法像这样访问。 尝试使用ADT创建带有选项卡导航的项目,然后查看代码,它将阐明您的概念。 该向导还将为您生成一个虚拟选项卡片段类,它看起来像
public static class FragHomeUI extends Fragment
将在类的后续成员内创建并访问片段视图:
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState)
{
View rootView = inflater.inflate(R.layout.fragment_home, container,
false);
再说一遍,通过ADT向导创建一些示例项目并仔细观察代码。
答案 5 :(得分:0)
它可能有帮助。
FragmentManager fm = getSupportFragmentManager();
Fragment fragment_byID = fm.findFragmentById(R.id.fragment_id);
//OR
Fragment fragment_byTag = fm.findFragmentByTag("fragment_tag");
答案 6 :(得分:0)
请在Xamarin.Android 4.12.02001中尝试此代码:
FileListFragment fileListFragment = Android.Runtime.Extensions.JavaCast<FileListFragment>(SupportFragmentManager.FindFragmentById(Resource.Id.id_file_list_fragment));