I have a `cursorLoader` which is working fine.

问题是我没有像我想的那样使用它,我将数据从cursorLoader加载到arrayLists然后使用列表.

我发现这个教程展示了如何将cursorLoader与viewPager一起使用,但我不明白如何实现它.

http://tumble.mlcastle.net/post/25875136857/bridging-cursorloaders-and-viewpagers-on-android

我有一个片段,看起来像这样:

public class FirstFragment extends Fragment {
    MapView mapView;
    GoogleMap map;
    // Store instance variables
    private String email,about,imagepath,latitude,longitude;
    Button getDirections;

    // newInstance constructor for creating fragment with arguments
    public static FirstFragment newInstance(String email,String about,String imagepath,String latitude,String longitude) {
        FirstFragment fragmentFirst = new FirstFragment();
        Bundle args = new Bundle();
        args.putString("email",email);
        args.putString("about",about);
        args.putString("imagepath",imagepath);
        args.putString("latitude",latitude);
        args.putString("longitude",longitude);
        fragmentFirst.setArguments(args);
        return fragmentFirst;
    }

    // Store instance variables based on arguments passed
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        email = getArguments().getString("email");
        about = getArguments().getString("about");
        imagepath = getArguments().getString("imagepath");
        latitude = getArguments().getString("latitude");
        longitude = getArguments().getString("longitude");
    }

    // Inflate the view for the fragment based on layout XML
    @Override
    public View onCreateView(LayoutInflater inflater,ViewGroup container,final Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.zzfragment_pager_items,container,false);
        ImageView imageView = (ImageView) view.findViewById(R.id.listpager_imageView);
        TextView about = (TextView) view.findViewById(R.id.listpager_text);
        TextView emaill = (TextView) view.findViewById(R.id.listpager_title);
        about.setText(this.about);
        emaill.setText(this.email);

        ImageLoader imageLoader = ImageLoader.getInstance();
        displayImageOptions options = new displayImageOptions.Builder().cacheInMemory(true)
                .cacheOndisc(true).resetViewBeforeLoading(true)
                .considerExifParams(true)
                .build();
        imageLoader.getInstance().displayImage(imagepath,imageView,options);

        getDirections = (Button) view.findViewById(R.id.getdirections);

        getDirections.setonClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                String strUri = "http://maps.google.com/maps?q=loc:" + latitude + "," + longitude + " (" + email + ")";
                Intent mapIntent = new Intent(android.content.Intent.ACTION_VIEW,Uri.parse(strUri));

                mapIntent.setClassName("com.google.android.apps.maps","com.google.android.maps.MapsActivity");

                getActivity().startActivity(mapIntent);

            }
        });

//        View v = inflater.inflate(R.layout.listviewtopager,false);
        // Gets the MapView from the XML layout and creates it
        mapView = (MapView) view.findViewById(R.id.mapview);
        mapView.onCreate(savedInstanceState);

        // Gets to GoogleMap from the MapView and does initialization stuff
        map = mapView.getMap();
        map.getUiSettings().setMyLocationButtonEnabled(false);
        map.setMyLocationEnabled(true);

        // Needs to call MapsInitializer before doing any CameraUpdateFactory calls
        MapsInitializer.initialize(this.getActivity());

        // Updates the location and zoom of the MapView
        CameraUpdate cameraUpdate = CameraUpdateFactory.newLatLngZoom(new LatLng(Double.parseDouble(latitude),Double.parseDouble(longitude)),10);
        map.animateCamera(cameraUpdate);

        return view;
    }

    @Override
    public void onResume() {
        mapView.onResume();
        super.onResume();
    }

    @Override
    public void onDestroy() {
        super.onDestroy();
        mapView.onDestroy();
    }

    @Override
    public void onLowMemory() {
        super.onLowMemory();
        mapView.onLowMemory();
    }
}

而我在这堂课中称它为:

public class ViewPagerFragment extends FragmentActivity implements
        LoaderManager.LoaderCallbacks<Cursor>{

    ArrayList<String> e

mail = new ArrayList<String>();
ArrayList<String> about = new ArrayList<String>();

ArrayList<String> imagepath = new ArrayList<String>();

ArrayList<String> latitude = new ArrayList<String>();

ArrayList<String> longitude = new ArrayList<String>();

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_view_pager_fragment);
    getLoaderManager().initLoader(1,null,this);
}

private SmartFragmentStatePagerAdapter adapterViewPager;

// Extend from SmartFragmentStatePagerAdapter Now instead for more dynamic ViewPager items
public static class MyPagerAdapter extends SmartFragmentStatePagerAdapter {
    private final ArrayList<String> email;
    private final ArrayList<String> about;
    private final ArrayList<String> imagepath;
    private final ArrayList<String> latitude;
    private final ArrayList<String> longitude;
    private int listPosition;

    public MyPagerAdapter(FragmentManager fragmentManager,ArrayList<String> email,ArrayList<String> about,ArrayList<String> imagepath,ArrayList<String> latitude,ArrayList<String> longitude,int lPosition) {
        super(fragmentManager);
        this.imagepath=imagepath;
        this.email=email;
        this.about = about;
        this.latitude= latitude;
        this.longitude = longitude;
        listPosition = lPosition;
    }

// Returns total number of pages
@Override
public int getCount() {
    return email.size();
}



 // Returns the fragment to display for that page
    @Override
        public Fragment getItem(int position) {
//            return FirstFragment.newInstance(listPosition+position,email.get(listPosition+position));
            return FirstFragment.newInstance(email.get(position),about.get(position),imagepath.get(position),latitude.get(position),longitude.get(position));
    }

    // Returns the page title for the top indicator
    @Override
    public CharSequence getPageTitle(int position) {
        return "Page " + position;
    }

}

@Override
public Loader<Cursor> onCreateLoader(int id,Bundle args) {
    String[] projection =
            {
                    ActivitiesTable.KEY_EMAIL,ActivitiesTable.KEY_ABOUT,ActivitiesTable.KEY_IMAGEPATH,ActivitiesTable.KEY_LATITUDE,ActivitiesTable.KEY_LONGITUTDE

            };
    CursorLoader cursorLoader = new CursorLoader(this,NameContentProvider.NAME_ACTIVITIES_URI,projection,null);
    return cursorLoader;
}

@Override
public void onLoadFinished(android.content.Loader<Cursor> loader,Cursor cursor) {
    if (cursor != null && cursor.getCount() > 0) {
        cursor.movetoFirst();
        do {
            email.add(cursor.getString(cursor
                    .getColumnIndexOrThrow("email")));
            about.add(cursor.getString(cursor
                    .getColumnIndexOrThrow("about")));
            imagepath.add(cursor.getString(cursor
                    .getColumnIndexOrThrow("imagepath")));
            latitude.add(cursor.getString(cursor
                    .getColumnIndexOrThrow("serverLatitude")));
            longitude.add(cursor.getString(cursor
                    .getColumnIndexOrThrow("serverLongitude")));
        } while (cursor.movetoNext());
    }

    int listPosition = getIntent().getExtras().getInt("position");


    ViewPager vpPager = (ViewPager) findViewById(R.id.vpPager);
    adapterViewPager = new MyPagerAdapter(getSupportFragmentManager(),email,longitude,listPosition);
    vpPager.setAdapter(adapterViewPager);
    vpPager.setCurrentItem(listPosition);

}

@Override
public void onLoaderReset(android.content.Loader<Cursor> loader) {



   }
}

如何修改代码以使用该教程直接将viewPager与加载器一起使用,而不是将所有内容存储在列表中然后使用列表?

解决方法

我无法评论,所以我正在写一个答案..

您有一个实现LoaderCallbacks< Cursor>的活动.加载数据时,您的活动会收到onLoadFinished回调.在此方法中,您有一个应该在ViewPager中显示的Cursor.

要显示Cursor中的数据,请在适配器上调用swapCursor方法.因此,每次加载数据时都不要创建适配器.创建一次,然后只需调用swapCursor即可.

此外,每次都找不到ViewPager – findViewById是一个繁重的操作,它应该在创建视图层次结构后执行.

所以,你的onLoadFinished将如下所示:

@Override
public void onLoadFinished(android.content.Loader<Cursor> loader,Cursor cursor) {
    if (adapterViewPager == null) {
        adapterViewPager = new MyPagerAdapter(getSupportFragmentManager(),cursor);
        vpPager.setAdapter(adapterViewPager);
    } else {
        adapterViewPager.swapCursor(cursor);
    }
}

android – 如何在ViewPager中使用cursorLoader?的更多相关文章

  1. 用canvas做一个DVD待机动画的实现代码

    这篇文章主要介绍了用canvas做一个DVD待机动画的实现代码的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

  2. HTML5自定义视频播放器源码

    这篇文章主要介绍了HTML5自定义视频播放器源码,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下

  3. Html5 滚动穿透的方法

    这篇文章主要介绍了Html5 滚动穿透的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

  4. HTML5自定义mp3播放器源码

    这篇文章主要介绍了HTML5自定义mp3播放器源码,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下

  5. CSS中实现动画效果-附案例

    这篇文章主要介绍了 CSS中实现动画效果并附上案例代码及实现效果,就是CSS动画样式处理,动画声明需要使用@keyframes name,后面的name是人为定义的动画名称,下面我们来看看文章的具体实现内容吧,需要的小伙伴可以参考一下

  6. html5默认气泡修改的代码详解

    这篇文章主要介绍了html5默认气泡修改的代码详解,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

  7. Html5移动端适配IphoneX等机型的方法

    这篇文章主要介绍了Html5移动端适配IphoneX等机型的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

  8. 小程序瀑布流解决左右两边高度差距过大的问题

    这篇文章主要介绍了小程序瀑布流解决左右两边高度差距过大的问题的相关资料,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

  9. HTML5自定义元素播放焦点图动画的实现

    这篇文章主要介绍了HTML5自定义元素播放焦点图动画的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

  10. HTML5 WebSocket实现点对点聊天的示例代码

    这篇文章主要介绍了HTML5 WebSocket实现点对点聊天的示例代码的相关资料,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

随机推荐

  1. bluetooth-lowenergy – Altbeacon库无法在Android 5.0上运行

    昨天我在Nexus4上获得了Android5.0的更新,并且altbeacon库停止了检测信标.似乎在监视和测距时,didEnterRegion和didRangeBeaconsInRegion都没有被调用.即使RadiusNetworks的Locate应用程序现在表现不同,一旦检测到信标的值,它们就不再得到更新,并且通常看起来好像信标超出了范围.我注意到的一点是,现在在logcat中出现以下行“B

  2. android – react-native动态更改响应者

    我正在使用react-native进行Android开发.我有一个视图,如果用户长按,我想显示一个可以拖动的动画视图.我可以使用PanResponder实现这一点,它工作正常.但我想要做的是当用户长按时,用户应该能够继续相同的触摸/按下并拖动新显示的Animated.View.如果您熟悉Google云端硬盘应用,则它具有类似的功能.当用户长按列表中的任何项目时,它会显示可拖动的项目.用户可以直接拖

  3. android – 是否有可能通过使用与最初使用的证书不同的证书对其进行签名来发布更新的应用程序

    是否可以通过使用与最初使用的证书不同的证书进行签名来发布Android应用程序的更新?我知道当我们尝试将这样的构建上传到市场时,它通常会给出错误消息.但有没有任何出路,比如将其标记为主要版本,指定市场中的某个地方?解决方法不,你不能这样做.证书是一种工具,可确保您是首次上传应用程序的人.所以总是备份密钥库!

  4. 如何检测Android中是否存在麦克风?

    ..所以我想在让用户访问语音输入功能之前检测麦克风是否存在.如何检测设备上是否有麦克风.谢谢.解决方法AndroidAPI参考:hasSystemFeature

  5. Android – 调用GONE然后VISIBLE使视图显示在错误的位置

    我有两个视图,A和B,视图A在视图B上方.当我以编程方式将视图A设置为GONE时,它将消失,并且它正下方的视图将转到视图A的位置.但是,当我再次将相同的视图设置为VISIBLE时,它会在视图B上显示.我不希望这样.我希望视图B回到原来的位置,这是我认为会发生的事情.我怎样才能做到这一点?编辑–代码}这里是XML:解决方法您可以尝试将两个视图放在RelativeLayout中并相对于彼此设置它们的位置.

  6. android – 获得一首歌的流派

    我如何阅读与歌曲相关的流派?我可以读这首歌,但是如何抓住这首歌的流派,它存放在哪里?解决方法检查此代码:

  7. android – 使用textShadow折叠工具栏

    我有一个折叠工具栏的问题,在展开状态我想在文本下面有一个模糊的阴影,我使用这段代码:用:我可以更改textColor,它可以工作,但阴影不起作用.我为阴影尝试了很多不同的值.是否可以为折叠文本投射阴影?

  8. android – 重用arm共享库

    我已经建立了armarm共享库.我有兴趣重用一个函数.我想调用该函数并获得返回值.有可能做这样的事吗?我没有任何头文件.我试过这个Android.mk,我把libtest.so放在/jni和/libs/armeabi,/lib/armeabi中.此时我的cpp文件编译,但现在是什么?我从objdump知道它的名字编辑:我试图用这个android.mk从hello-jni示例中添加prebuild库:它工作,但libtest.so相同的代码显示以下错误(启动时)libtest.so存在于libhello-j

  9. android – 为NumberPicker捕获键盘’Done’

    我有一个AlertDialog只有一些文本,一个NumberPicker,一个OK和一个取消.(我知道,这个对话框还没有做它应该保留暂停和恢复状态的事情.)我想在软键盘或其他IME上执行“完成”操作来关闭对话框,就像按下了“OK”一样,因为只有一个小部件可以编辑.看起来处理IME“Done”的最佳方法通常是在TextView上使用setonEditorActionListener.但我没有任何Te

  10. android – 想要在调用WebChromeClient#onCreateWindow时知道目标URL

    当我点击一个带有target=“_blank”属性的超链接时,会调用WebChromeClient#onCreateWindow,但我找不到新的窗口将打开的新方法?主页url是我唯一能知道的东西?我想根据目标网址更改应用行为.任何帮助表示赞赏,谢谢!

返回
顶部