sam*_*mis 163 android xamarin.android android-fragments fragmentpageradapter
我在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)
{
base.OnCreate (bundle);
SetContentView(Resource.Layout.fragment_pager);
//adapter = new MyAdapter(SupportFragmentManager);
adapter = new MyAdapter(FragmentManager);
pager = FindViewById<ViewPager>(Resource.Id.pager);
pager.Adapter = adapter;
var button = FindViewById<Button>(Resource.Id.goto_first);
button.Click += (sender, e) => {
pager.CurrentItem = 0;
};
button = FindViewById<Button>(Resource.Id.goto_last);
button.Click += (sender, e) => {
pager.CurrentItem = NUM_ITEMS - 1;
};
}
// ?????????????????????????????????????????????????
// - where is FragmentPagerAdapter
// ?????????????????????????????????????????????????
protected class MyAdapter : FragmentPagerAdapter
{
public MyAdapter(FragmentManager fm) : base(fm)
{
}
public override int Count {
get {
return NUM_ITEMS;
}
}
public override Fragment GetItem (int position)
{
return new ArrayListFragment(position);
}
}
protected class ArrayListFragment : ListFragment
{
int num;
public ArrayListFragment()
{
}
public ArrayListFragment(int num)
{
var args = new Bundle();
args.PutInt("num", num);
Arguments = args;
}
public override void OnCreate (Bundle p0)
{
base.OnCreate (p0);
num = Arguments != null ? Arguments.GetInt("num") : 1;
}
public override View OnCreateView (LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
var v = inflater.Inflate(Resource.Layout.fragment_pager_list, container, false);
var tv = v.FindViewById<TextView>(Resource.Id.text);
tv.Text = "Fragment #" + num;
return v;
}
public override void OnActivityCreated (Bundle p0)
{
base.OnActivityCreated (p0);
ListAdapter = new ArrayAdapter<string>(Activity, Android.Resource.Layout.SimpleListItem1, Cheeses.cheeseStrings);
}
public override void OnListItemClick(ListView l, View v, int position, long id) {
Console.WriteLine ( "Item clicked: " + id);
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
Pea*_*oto 201
有一个android.support.v13.app.FragmentPagerAdapter
,它应该做你想要它做的事情.它是非支持片段的FragmentPagerAdapter.
Android Studio安装
请添加以下Gradle依赖项
dependencies {
compile 'com.android.support:support-v13:+'
}
Run Code Online (Sandbox Code Playgroud)
sam*_*mis 16
呃,你只需要使用V13支持库中的FragmentPagerAdapter
Android.Support.V13.App.FragmentPagerAdapter
Run Code Online (Sandbox Code Playgroud)
然后,除了ViewPager之外,所有其他与Fragment相关的类都可以从"普通"库/命名空间中使用,但这没什么大不了的.
以下是完整性示例(来自https://github.com/xamarin/monodroid-samples/的修改后的"Support4"示例):
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.Util;
using Android.Views;
using Android.Widget;
using Java.Lang;
using Android.Support.V4.View;
using Fragment = Android.App.Fragment;
namespace Support4
{
[Activity (Label = "@string/fragment_pager_support")]
[IntentFilter (new[]{Intent.ActionMain}, Categories = new[]{ "mono.support4demo.sample" })]
public class FragmentPagerSupport : Activity
//public class FragmentPagerSupport : FragmentActivity
{
const int NUM_ITEMS = 4;
protected MyAdapter _pagerAdapter;
protected ViewPager _viewPager;
protected override void OnCreate (Bundle bundle)
{
base.OnCreate (bundle);
SetContentView(Resource.Layout.fragment_pager);
List<Fragment> fragments = new List<Fragment>();
// *** MonoDroid 4.2.7 letter case bug *** make's first letter lower.
//string typeName = typeof(Fragment1).FullName;
string typeName = "support4." + typeof(Fragment1).Name;
fragments.Add(Fragment.Instantiate(this, typeName));
fragments.Add(Fragment.Instantiate(this, typeName));
fragments.Add(Fragment.Instantiate(this, typeName));
fragments.Add(Fragment.Instantiate(this, typeName));
//adapter = new MyAdapter(SupportFragmentManager);
_pagerAdapter = new MyAdapter(FragmentManager, fragments);
_viewPager = FindViewById<ViewPager>(Resource.Id.view_pager);
_viewPager.Adapter = _pagerAdapter;
}
public override bool OnTouchEvent(MotionEvent e)
{
return base.OnTouchEvent(e);
}
protected class MyAdapter : Android.Support.V13.App.FragmentPagerAdapter
{
private List<Fragment> _fragments;
public override Java.Lang.Object InstantiateItem(View p0, int p1)
{
return base.InstantiateItem(p0, p1);
}
public MyAdapter(Android.App.FragmentManager fm)
: base(fm)
{
}
//public MyAdapter(Android.Support.V4.App.FragmentManager fm, List<Android.Support.V4.App.Fragment> fragments)
// : base(fm)
public MyAdapter(FragmentManager fm, List<Fragment> fragments)
: base(fm)
{
_fragments = fragments;
}
public override int Count {
get {
return NUM_ITEMS;
}
}
//public override Android.Support.V4.App.Fragment GetItem(int p0)
public override Fragment GetItem(int p0)
{
return _fragments[p0];
}
public override float GetPageWidth(int p0)
{
//return base.GetPageWidth(p0);
//base.GetPageWidth(p0);
return (float)(0.5f);
}
}
}
//public class Fragment1 : Android.Support.V4.App.Fragment
public class Fragment1 : Fragment
{
int num;
private static int _colorIndex = 0;
private static Android.Graphics.Color[] _colors = new[] { Android.Graphics.Color.Aqua, Android.Graphics.Color.DarkViolet,
Android.Graphics.Color.Coral, Android.Graphics.Color.Bisque};
public Fragment1()
{
}
public Fragment1(int num)
{
var args = new Bundle();
args.PutInt("num", num);
Arguments = args;
}
public override void OnCreate(Bundle p0)
{
base.OnCreate(p0);
num = Arguments != null ? Arguments.GetInt("num") : 1;
}
public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
View v = inflater.Inflate(Resource.Layout.aaaaa, container, false);
TextView tv = v.FindViewById<TextView>(Resource.Id.text);
tv.Text = "# " + _colorIndex;
tv.SetBackgroundColor(_colors[_colorIndex++]);
return v;
}
public override void OnActivityCreated(Bundle p0)
{
base.OnActivityCreated(p0);
}
}
}
Run Code Online (Sandbox Code Playgroud)
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright (C) 2010 The Android Open Source Project
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<!-- Top-level content view for the simple fragment sample. -->
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal" android:padding="4dip"
android:layout_width="match_parent" android:layout_height="match_parent">
<!--android:gravity="center_horizontal"-->
<android.support.v4.view.ViewPager
android:id="@+id/view_pager"
android:layout_width="700dip"
android:layout_height="match_parent"
android:layout_weight="1"
android:background="#FFCCFFFF">
<!--android:layout_width="match_parent"-->
</android.support.v4.view.ViewPager>
</LinearLayout>
Run Code Online (Sandbox Code Playgroud)
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/screen_container"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView android:id="@+id/text"
android:layout_width="match_parent" android:layout_height="match_parent"
android:gravity="center_vertical|center_horizontal"
android:textAppearance="?android:attr/textAppearanceMedium"
android:text="@string/hello_world"
android:background="#FF335555"/>
</LinearLayout>
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
46369 次 |
最近记录: |