我正在使用Viewpager在页面之间切换.我在ViewPager中有五个页面,它从我的自定义游标适配器获取数据.问题是切换页面不顺畅,这是不稳定的.我究竟做错了什么 ?任何帮助都非常感谢.

// MYPAGER

private class MyPagerAdapter extends PagerAdapter{

    public int getCount() 
    {
        return 5;
    }

    public Object instantiateItem(View collection,int position) 
    {

        LayoutInflater inflater = (LayoutInflater) collection.getContext()
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);

        View view;

        SharedPreferences myoptions = getSharedPreferences("options",Context.MODE_PRIVATE);
        SharedPreferences.Editor prefEditor = myoptions.edit();    

        view = inflater.inflate(R.layout.all_tasks,null);

        ((ViewPager) collection).addView(view,0);

           //getting list view
           lv= (ListView)findViewById(R.id.list);

        MyAdapter adapter1;

        switch (position) {
        case 0:

            prefEditor.putInt("filter",5);
            prefEditor.commit();

            if(selectedList!=null)
            {
                cursor1= managedQuery(uri,PROJECTION,where +" AND "+ taskColumns.LIST+ "= ?"
                    +" AND "+ taskColumns.DONE+ "= ?",new String[] {selectedList,"0"},sortingOrder);
            }
             else
                cursor1= managedQuery(uri,where+" AND "+ taskColumns.DONE+ "= ?",new String[] {"0"},sortingOrder);


           if (cursor1 != null)
           {
              cursor1.movetoFirst();

           }

           adapter1 = new MyAdapter(tasks.this,cursor1);
            lv.setAdapter(adapter1);

            break;
        case 1:

            prefEditor.putInt("filter",4);
            prefEditor.commit();


            if(selectedList!=null)
            {
                cursor1= managedQuery(uri,taskColumns.LIST+ "= ?",new String[] {selectedList},sortingOrder);
            }
             else
                 cursor1= managedQuery(uri,where,null,sortingOrder); 

               if (cursor1 != null)
               {
                   cursor1.movetoFirst();
               }

               adapter1 = new MyAdapter(tasks.this,cursor1);
                lv.setAdapter(adapter1);

            break;
        case 2:

            prefEditor.putInt("filter",1);
            prefEditor.commit();

            if(selectedList!=null)
            {
                cursor1= managedQuery(uri,where +" AND "+ taskColumns.LIST+ "= ?",sortingOrder);

               if (cursor1 != null)
               {
                   cursor1.movetoFirst();
               }

               adapter1 = new MyAdapter(tasks.this,cursor1);
                lv.setAdapter(adapter1);

            break;
        case 3:

            prefEditor.putInt("filter",2);
            prefEditor.commit();

            if(selectedList!=null)
            {
                cursor1= managedQuery(uri,cursor1);
                lv.setAdapter(adapter1);
            break;
        case 4:

            prefEditor.putInt("filter",3);
            prefEditor.commit();

            if(selectedList!=null)
            {
                cursor1= managedQuery(uri,sortingOrder);   

            if (cursor1 != null)
               {
                cursor1.movetoFirst();
               }

            adapter1 = new MyAdapter(tasks.this,cursor1);
            lv.setAdapter(adapter1);
            break;
        }

        return view;
    }

    @Override
    public void destroyItem(View arg0,int arg1,Object arg2) {
        ((ViewPager) arg0).removeView((View) arg2);

    }

    @Override
    public boolean isViewFromObject(View arg0,Object arg1) {
        return arg0 == ((View) arg1);

    }

    @Override
    public Parcelable saveState() 
    {
        return null;
    }

}

//自定义适配器

static class ViewHolder {
    public TextView task;
    public TextView note;
    public ImageView note_img;
    public TextView priority;
    public CheckBox done;
    public TextView showingByList;
    public TextView space;
    public LinearLayout b;
}

public class MyAdapter extends CursorAdapter {
    private final int taskIndex;
    private final LayoutInflater Inflater;
    private final int doneIndex;
    private final int priorIndex;
    private final int rowIndex;
    private final int taskListIndex;
    private final int NoteIndex;
    boolean innewView;

    public MyAdapter(Context context,Cursor c) 
    {
        super(context,c);

        this.taskIndex = c.getColumnIndex(taskColumns.TASK);
        this.priorIndex = c.getColumnIndex(taskColumns.PRIORITY);
        this.doneIndex = c.getColumnIndex(taskColumns.DONE);
        this.rowIndex = c.getColumnIndex(taskColumns._ID);
        this.taskListIndex = c.getColumnIndex(taskColumns.LIST);
        this.NoteIndex = c.getColumnIndex(taskColumns.NOTE);

        this.Inflater = LayoutInflater.from(context);
    }

     @Override
        public View newView(Context context,Cursor cursor,ViewGroup parent)
     {

            View v = Inflater.inflate(R.layout.tasks_row,parent,false);              
            innewView=true;

            return v;

     }

     @Override
        public void bindView(View view,Context context,final Cursor cursor) {

         final ViewHolder viewHolder;

         if(innewView)
         {

                viewHolder = new ViewHolder();
                viewHolder.task = (TextView) view.findViewById(R.id.task);
                 viewHolder.note = (TextView) view.findViewById(R.id.note);
                 viewHolder.note_img = (ImageView) view.findViewById(R.id.note_img);
                 viewHolder.priority = (TextView) view.findViewById(R.id.priority);
                 viewHolder.done = (CheckBox) view.findViewById(R.id.check);
                 viewHolder.b=(LinearLayout)view.findViewById(R.id.task_layout);
                 viewHolder.showingByList = (TextView) view.findViewById(R.id.tasklist);

                 view.setTag(viewHolder);        
         }
         else    
             viewHolder = (ViewHolder)view.getTag();

         innewView=false;

         final String task = cursor.getString(taskIndex);
         String TaskNote = cursor.getString(NoteIndex);
         int prior= cursor.getInt(priorIndex);
         int taskDone= cursor.getInt(doneIndex);
         final long id=cursor.getLong(rowIndex);


         int uniqueyindex = cursor.getColumnIndex(taskColumns.UNIQUEY);

         if(TaskNote==null)
         {
         viewHolder.note.setVisibility(View.GONE);
         viewHolder.note_img.setVisibility(View.GONE);
         }
         else
         {
             if(TaskNote.length()<1)
             {
                 viewHolder.note.setVisibility(View.GONE);
                 viewHolder.note_img.setVisibility(View.GONE);
             }
             else{
         viewHolder.note.setVisibility(View.VISIBLE);
        viewHolder.note_img.setVisibility(View.VISIBLE);
             }
         } 

         if(showbyList){


             String taskList = cursor.getString(taskListIndex);
             if(taskList==null)
             {

                 ContentValues valuey=new ContentValues(); 
                 valuey.put(taskColumns.LIST_ID,"0");
                    valuey.put(taskColumns.LIST,"personal");
                    Uri mUry = ContentUris.withAppendedId(uri,id);
                    getContentResolver().update(mUry,valuey,null);
                    taskList="personal";
             }      

               // viewHolder.showingByList.setTypeface(tf);

             viewHolder.b.setVisibility(View.VISIBLE);

             viewHolder.space=(TextView)view.findViewById(R.id.space);
             viewHolder.space.setVisibility(View.VISIBLE);

             if(cursor.movetoPrevIoUs()){


             int comparedResult= taskList.compareto(cursor.getString(taskListIndex));

             if(comparedResult==0)
             {

                 viewHolder.showingByList.setVisibility(View.GONE); 
             }

             else{

                 viewHolder.showingByList.setVisibility(View.VISIBLE);
                 viewHolder.showingByList.setText(taskList.toupperCase());

             }



             }
             else{

                 viewHolder.showingByList.setVisibility(View.VISIBLE);
                 viewHolder.showingByList.setText(taskList.toupperCase());

             }

             cursor.movetoNext();

             viewHolder.showingByList.setonClickListener(new OnClickListener() 
             {

                public void onClick(View arg0) {

                }

             });
         }


         viewHolder.b.setBackgroundResource(R.drawable.my_drawable1);

         if(toModify.contains((int)id))
             viewHolder.b.setBackgroundResource(R.color.light_blue);

         viewHolder.task.setText(task);

         if(TaskNote!=null)
         viewHolder.note.setText(TaskNote);

         if(taskDone==1){
         viewHolder.done.setChecked(true);
             viewHolder.task.setTextColor(getResources().getColor(R.color.smooth));
             viewHolder.note.setTextColor(getResources().getColor(R.color.smooth));
             viewHolder.note_img.setimageResource(R.drawable.note_done2);
         viewHolder.priority.setBackgroundResource(R.drawable.priornone);
         }
         else{
             viewHolder.done.setChecked(false);
             viewHolder.task.setTextColor(getResources().getColor(R.color.darkthemed_text));
             viewHolder.note.setTextColor(getResources().getColor(R.color.darkthemed_note));
             viewHolder.note_img.setimageResource(R.drawable.note2);
             if(prior==1){
         viewHolder.priority.setBackgroundResource(R.drawable.priornone);
                     }
             else{
             viewHolder.priority.setBackgroundResource(R.color.priority_2); 
            }
         }
         }


}

解决方法

将来,请尝试发布少量代码.如同,请尝试隔离您可能认为发生问题的特定区域.我知道您可能不知道,在这种情况下,转储两个适配器都没问题.只要知道,当有更少的代码可供阅读时,任何人都可以帮助您.

至于你可以做什么,你应该尝试使用ViewPager中的setoffScreenPageLimit.

Set the number of pages that should be retained to either side of the
current page in the view hierarchy in an idle state. Pages beyond this
limit will be recreated from the adapter when needed.

Here are the docs for it.

YOURPAGER.setoffscreenPageLimit(LIMIT);

android – 在ViewPager中切换页面并不流畅的更多相关文章

  1. android – 在RecyclerView中更新ProgressBar

    我有一个RecyclerView.其中,项目具有标准布局–一个TextView和一个ProgressBar.项目在运行时添加到recyclerview.每当添加一个Item时,都会启动一个更新ProgressBar的AsyncTask.AsynTask保存了RecyclerViewAdapter对ProgressBar对象的引用.当回收器视图中的项目太多时,会发生此问题.我知道RecyclerVi

  2. android – 在listview中添加viewpager作为滚动标题

    我试图在列表标题中添加Viewpager(使用支持库4),但它没有显示任何内容.这是我的代码请帮忙.它将在列表标题中不作为项目,因此它不应该是一个问题.解决方法listadapter之后的listview页眉和页脚显示.如果你尝试setadapter,并且看不到viewpager.检查viewpager的宽度和高度.如果viewpager的宽度或高度值为0.在viewgroup中创建LienarL

  3. 从ViewPager Fragments中隐藏Android应用程序中的软键盘

    我有一个Android应用程序,其中包含一个包含2个片段的ViewPager.第一个片段包含EditText字段.当应用程序启动时,该字段立即获得焦点并启动软键盘.第二个片段仅包含一个列表.当我从片段1滑动到片段2时,我希望键盘能够消失.我尝试过的任何东西似乎都没有用.键盘不仅保持在视图中,还继续更新片段1的EditText字段.我想我要么使用不正确的代码来隐藏键盘或将其放在错误的位置.如果任何人都可以发布正确实现的示例,将不胜感激!

  4. android – Slider Menu片段中的可交换选项卡

    我已经通过引用thistutorial实现了导航抽屉,现在我想要做的是在片段内显示滑动标签.即当我点击导航抽屉中的一个项目时,让我们说第一个项目,它应显示该项目的滑动标签.如果item1是Events,当我点击它时,它应该显示滑动标签.但我面临以下问题:–>如何在片段内实现视图寻呼机?

  5. android – 如何在ViewPager中使用cursorLoader?

    解决方法我无法评论,所以我正在写一个答案..您有一个实现LoaderCallbacks的活动.加载数据时,您的活动会收到onLoadFinished回调.在此方法中,您有一个应该在ViewPager中显示的Cursor.要显示Cursor中的数据,请在适配器上调用swapCursor方法.因此,每次加载数据时都不要创建适配器.创建一次,然后只需调用swapCursor即可.此外,每次都找不到ViewPager–findViewById是一个繁重的操作,它应该在创建视图层次结构后执行.所以,你的onLoad

  6. android – FragmentPagerAdapter不会在方向更改时重新创建片段吗?

    可能是其他一些解决方案?这些碎片有什么问题?

  7. android – Horizo​​ntalScrollView还是Carrousel?

    我在SO上找到的最接近的例子是here.这正是我需要的,但我已经测试了给出的答案,但它对我不起作用……但问题中的图像正是我想要的.任何人都可以指导我这样做吗?编辑2:根据你给出的两个例子,你看过this和this吗?这就是你要找的东西吗?

  8. android – 为列表视图中的每个元素设置不同的分隔符颜色

    我想在列表元素之间有一个包含不同分隔符的列表.我用这段代码定义了一个高度为1的白色分隔符:然而,它将所有元素的分隔符设置为白色,我想只有一些是白色而另一个是不同的颜色.我怎样才能做到这一点?

  9. 选项卡图标和文本均使用android设计支持库

    解决方法你是什么意思未被选中.你能分享一下你想要达到的目标以及你现在所处的位置.我不推荐你的做法.它做了很多不需要的东西来解决你的问题.我建议使用TabLayout类中的图标和文本,只需设置图标和文本.或者,如果需要,甚至是自定义布局,但使用TabLayout中的text1和图标.这样做有什么问题吗?

  10. Android在FragmentPagerAdapter中的Fragment中设置TextView文本

    更新:那么做这样的事情?

随机推荐

  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是我唯一能知道的东西?我想根据目标网址更改应用行为.任何帮助表示赞赏,谢谢!

返回
顶部