0

各ページにいくつかの項目を持つ ListView がある ViewPager を作成しようとしています。アプリは正常にコンパイルおよび実行されますが、スワイプ時に ViewPager が次または前のページに移動するのに約 1 ~ 2 分かかる場合があるという問題があります。私が使用しているコードは次のとおりです。

メイン起動画面のアクティビティは次のとおりです。

public class LaunchScreen extends FragmentActivity 
{
    @Override
    protected void onCreate(Bundle savedInstanceState) 
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activitylaunchscreen);

        int[] size = {2,3,1,4,1,3,3,3,3,1};

        ArrayList<Parent> parents = new ArrayList<Parent>();

        for(int i=0; i<size.length; i++)
        {
            ArrayList<Child> childs = new ArrayList<Child>();

            for(int j=0; j<size[i]; j++)
            {
                childs.add(new Child("" + j));
            }

            Parent parent = new Parent(childs);
            parents.add(parent);
        }

        MyPagerAdapter myPageAdapter = new MyPagerAdapter(getSupportFragmentManager(), this, parents);
        ViewPager viewPager = (ViewPager) findViewById(R.id.activitylaunchscreen_viewpager);
        viewPager.setAdapter(myPageAdapter);
    }
}

ViewPager のアダプタは次のとおりです。

public class MyPagerAdapter extends FragmentPagerAdapter
{
    final String parentFragmentTag = "visit";

    Context context;

    ArrayList<Parent> parents;

    public MyPagerAdapter(FragmentManager fragmentManager, Context context, ArrayList<Parent> parents)
    {
        super(fragmentManager);

        this.context = context;

        this.parents = parents;
    }


    @Override
    public Fragment getItem(int position) 
    {
        MyFragment myFragment = new MyFragment();

        myFragment.setParent(parents.get(position));

        return myFragment;

    }



    @Override
    public int getCount() 
    {
        return parents.size();
    }
}

各ページのフラグメントは次のとおりです。

public class MyFragment extends ListFragment
{
    Parent parent;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup viewGroup, Bundle bundle)
    {       
        View view = inflater.inflate(R.layout.fragmentparentpage, null);

        return view;
    }

    @Override
    public void onActivityCreated(Bundle savedInstanceState) 
    {
        super.onActivityCreated(savedInstanceState);
        ChildBaseAdapter childBaseAdapter = new ChildBaseAdapter(getActivity(), parent.getChilds());
        setListAdapter(childBaseAdapter);
    }

    public Parent getParent()
    {
        return parent;
    }

    public void setParent(Parent parent) 
    {
        this.parent = parent;
    }
}

最後に、各ページの ListView のアダプターは次のとおりです。

public class ChildBaseAdapter extends BaseAdapter
{
    private String childViewTag = "child";

    Context context;

    ArrayList<Child> childs;

    public ChildBaseAdapter(Context context, ArrayList<Child> childs)
    {
        this.context = context;

        this.childs = childs;
    }

    @Override
    public int getCount() 
    {
        return childs.size();
    }

    @Override
    public Object getItem(int position) 
    {
        return childs.get(position);
    }

    @Override
    public long getItemId(int position) 
    {
        return position;
    }

    @Override
    public View getView(int position, View view, ViewGroup viewGroup) 
    {

        if(view == null)
        {
            LayoutInflater inflater = (LayoutInflater) context.getSystemService(context.LAYOUT_INFLATER_SERVICE);
            view = inflater.inflate(R.layout.childlayout, null);
        }
        else
        {
            if(((String) view.getTag()).compareTo(childViewTag) != 0)
            {
                LayoutInflater inflater = (LayoutInflater) context.getSystemService(context.LAYOUT_INFLATER_SERVICE);
                view = inflater.inflate(R.layout.childlayout, null);
            }
        }

        TextView childName = (TextView) view.findViewById(R.id.childlayout_textviewChildName);

        childName.setText(childs.get(position).getNumber());
        view.setTag(childViewTag);

        return view;
    }
}

よろしくお願いします。

4

1 に答える 1

0

nvm アンドロイドが入れるパディングでした。デフォルトで新しいAndroidプロジェクトを作成すると、Androidはメインアクティビティのxmlファイルの親レイアウトにパディングを作成し、スクロールのためにビューページャーリスナーを台無しにするようです。

于 2013-05-27T16:16:56.870 に答える