片段的ViewPager中的Listview适配器-如何获取活动

朱利安

我正在尝试使用CursorLoader在设备上构建本地文件的音乐浏览器/播放器。我正在使用Xamarin android,c#。我使用的是片段内的ViewPager(不是FragmentActivity,因为片段是导航抽屉的一部分)。

我无法使用用于显示歌曲的listView.Adapter,因为我无法获取Activity。当直接在活动中使用此listview适配器时,它工作正常(我可以看到歌曲列表),但是当尝试在使用PagerAdapter的ViewPager中使用它时(在Fragment中全部使用)。我无法在listView.Adapter = new SongsAdapter(,cursor,songsList)中获得Activity 您能否指导我,以便能够将活动传递给适配器,或者让我知道我是否做错了一般情况(这使得不可能)?

谢谢你。感谢您的帮助:)

朱利安

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

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

using Android.Provider;
using Android.Database;
using Android.Net;


namespace project
{
    public class MyDeviceFragment : Fragment
    {
        private SlidingTabScrollView mSlidingTabScrollView;
        private ViewPager mViewPager;

        public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
        {
            return inflater.Inflate(Resource.Layout.slidingtabfragment, container, false);
        }

        public override void OnViewCreated(View view, Bundle savedInstanceState)
        {
            var activity = Activity;
            mSlidingTabScrollView = view.FindViewById<SlidingTabScrollView>(Resource.Id.sliding_tabs);
            mViewPager = view.FindViewById<ViewPager>(Resource.Id.viewpager);
            mViewPager.Adapter = new SamplePagerAdapter();

            mSlidingTabScrollView.ViewPager = mViewPager;
        }

        public class SamplePagerAdapter : PagerAdapter
        {
            List<string> items = new List<string>();

            public SamplePagerAdapter() : base()
            {
                items.Add("PLaylists");
                items.Add("Songs");
                items.Add("Albums");
                items.Add("Artists");
                items.Add("Genres");
            }

            public override int Count
            {
                get { return items.Count; }
            }

            public override bool IsViewFromObject(View view, Java.Lang.Object obj)
            {
                return view == obj;
            }

            public override Java.Lang.Object InstantiateItem(ViewGroup container, int position)
            {
                View view = null;

                switch (position) {
                case 1:
                    ListView listView;
                    view = LayoutInflater.From (container.Context).Inflate (Resource.Layout.testinglistactivity, container, false);
                    listView = view.FindViewById<ListView> (Resource.Id.List);

                    List<Song> songsList;

                    var uri = MediaStore.Audio.Media.ExternalContentUri;
                    string[] projection = {
                        MediaStore.Audio.Media.InterfaceConsts.Id,
                        MediaStore.Audio.Media.InterfaceConsts.AlbumId,
                        MediaStore.Audio.Media.InterfaceConsts.Title,
                        MediaStore.Audio.Media.InterfaceConsts.Artist,
                    };
                    var loader = new CursorLoader (container.Context, uri, projection, null, null, null);
                    var cursor = (ICursor)loader.LoadInBackground ();
                    songsList = new List<Song> ();
                    if (cursor.MoveToFirst ()) {
                        do {
                            songsList.Add (new Song {
                                Id = cursor.GetLong (cursor.GetColumnIndex (projection [0])),
                                AlbumId = cursor.GetString (cursor.GetColumnIndex (projection [1])),
                                Title = cursor.GetString (cursor.GetColumnIndex (projection [2])),
                                Artist = cursor.GetString (cursor.GetColumnIndex (projection [3]))
                            });
                        } while (cursor.MoveToNext ());
                    }

                    listView.Adapter = new SongsAdapter (this,cursor,songsList);//***********HERE is the issue*********************
                    break;
                default:
                    view = LayoutInflater.From (container.Context).Inflate (Resource.Layout.pager_item, container, false);
                    int pos = position + 1;
                    TextView txtTitle = view.FindViewById<TextView> (Resource.Id.item_title);

                    txtTitle.Text = pos.ToString ();
                    break;
                }
                container.AddView (view);
                return view;
            }

            public string GetHeaderTitle (int position)
            {
                return items[position];
            }

            public override void DestroyItem(ViewGroup container, int position, Java.Lang.Object obj)
            {
                container.RemoveView((View)obj);
            }
        }
    }
}
朱利安

通过执行以下操作,我能够解决此问题:

  1. 将Activity作为参数传递给:mViewPager.Adapter = new MyDeviceAdapter(Activity);
  2. this.context = context添加到SamplePager适配器的构造函数中

    公共类SamplePagerAdapter:PagerAdapter {活动上下文;列表项= new List();

        public SamplePagerAdapter(Activity context) : base()
        {
            this.context = context;
            items.Add("PLaylists");
            items.Add("Songs");
            items.Add("Albums");
            items.Add("Artists");
            items.Add("Genres");
        }
    

    ...

  3. 可选的(不是必需的):我确实将SamplePagerAdapter分隔在另一个文件中,在该文件中我可以使用Android.App而不是Android.Support.V4.App;

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何从ListView中的自定义适配器获取数据?

来自分类Dev

如何在适配器的getView的ListView中获取上下文

来自分类Dev

如何从Android的Listview中删除适配器

来自分类Dev

在阵列适配器中获取ListView的宽度

来自分类Dev

如何在listView适配器内的onclicklistener中获取textView文本

来自分类Dev

在片段活动中使用列表适配器

来自分类Dev

在适配器中启动活动

来自分类Dev

如何使用ListView和适配器在EditText中获取文本

来自分类Dev

从ViewPager中的片段调用适配器

来自分类Dev

如何从Kotlin中的适配器打开活动

来自分类Dev

ListView适配器崩溃活动

来自分类Dev

如何在其适配器中刷新android listview

来自分类Dev

片段活动中我的Listview适配器上的空指针

来自分类Dev

如何在片段中声明适配器?

来自分类Dev

我如何从视图分页器适配器中获取当前可见的片段。

来自分类Dev

从Android中的ListView适配器获取TextView

来自分类Dev

使用自定义适配器时如何从Android中的ListView获取数据

来自分类Dev

如何用适配器填充ListView

来自分类Dev

从带有SwipeToRefresh布局的ViewPager适配器中的CardList的RecycleView中获取scrollY属性

来自分类Dev

如何设置ListView适配器

来自分类Dev

从ViewPager中的片段调用适配器

来自分类Dev

如何在不获取空指针异常的情况下从活动片段中获取适配器?

来自分类Dev

如何从适配器调用片段

来自分类Dev

如何在回收器适配器中添加片段?

来自分类Dev

如何在另一个活动中获取阵列适配器的位置

来自分类Dev

从适配器上的片段获取字段并从片段上的适配器获取列表

来自分类Dev

如何从适配器设置 startActivityForResult 并在 viewPager 片段中获取结果

来自分类Dev

如何在 dialogFragment 中的 viewPager 中的片段中填充适配器?

来自分类Dev

如何使片段内的 Listview 适配器工作

Related 相关文章

  1. 1

    如何从ListView中的自定义适配器获取数据?

  2. 2

    如何在适配器的getView的ListView中获取上下文

  3. 3

    如何从Android的Listview中删除适配器

  4. 4

    在阵列适配器中获取ListView的宽度

  5. 5

    如何在listView适配器内的onclicklistener中获取textView文本

  6. 6

    在片段活动中使用列表适配器

  7. 7

    在适配器中启动活动

  8. 8

    如何使用ListView和适配器在EditText中获取文本

  9. 9

    从ViewPager中的片段调用适配器

  10. 10

    如何从Kotlin中的适配器打开活动

  11. 11

    ListView适配器崩溃活动

  12. 12

    如何在其适配器中刷新android listview

  13. 13

    片段活动中我的Listview适配器上的空指针

  14. 14

    如何在片段中声明适配器?

  15. 15

    我如何从视图分页器适配器中获取当前可见的片段。

  16. 16

    从Android中的ListView适配器获取TextView

  17. 17

    使用自定义适配器时如何从Android中的ListView获取数据

  18. 18

    如何用适配器填充ListView

  19. 19

    从带有SwipeToRefresh布局的ViewPager适配器中的CardList的RecycleView中获取scrollY属性

  20. 20

    如何设置ListView适配器

  21. 21

    从ViewPager中的片段调用适配器

  22. 22

    如何在不获取空指针异常的情况下从活动片段中获取适配器?

  23. 23

    如何从适配器调用片段

  24. 24

    如何在回收器适配器中添加片段?

  25. 25

    如何在另一个活动中获取阵列适配器的位置

  26. 26

    从适配器上的片段获取字段并从片段上的适配器获取列表

  27. 27

    如何从适配器设置 startActivityForResult 并在 viewPager 片段中获取结果

  28. 28

    如何在 dialogFragment 中的 viewPager 中的片段中填充适配器?

  29. 29

    如何使片段内的 Listview 适配器工作

热门标签

归档