【问题标题】:Android swiping, using ViewPager without tabsAndroid 刷卡,使用不带标签的 ViewPager
【发布时间】:2013-04-04 12:41:03
【问题描述】:

我正在尝试制作一个具有滑动导航类型的应用。 这是我走了多远:

片段活动:

package com.app.BoomBase;

import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

public class Fragment_control extends Fragment {

String tag = this.getClass().getSimpleName();
@Override
public void onCreate(Bundle savedInstanceState) {
    Log.i(tag, "onCreate");
    super.onCreate(savedInstanceState);
    /** Getting the arguments to the Bundle object */
    Bundle data = getArguments();

}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
    Log.i(tag, "onCreateView");

    View view = inflater.inflate(R.layout.fragment_controle,container, false ); 

    return view;
  }

  }

片段页面适配器:

package com.app.BoomBase;

import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;

  public class Fragment_Pager extends FragmentPagerAdapter {

final int PAGE_COUNT = 3;
public Fragment_Pager(FragmentManager fm) {
    super(fm);
    // TODO Auto-generated constructor stub
}

@Override
public Fragment getItem(int arg0) {

    Fragment_control myFragment = new Fragment_control();
    Bundle data = new Bundle();
    data.putInt("current_page", arg0+1);
    myFragment.setArguments(data);
    return myFragment;

}

@Override
public int getCount() {
    // TODO Auto-generated method stub
    return PAGE_COUNT;
}

}

主活动:

package com.app.BoomBase;

import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentManager;
import android.support.v4.view.ViewPager;
import android.util.Log;
import android.view.Menu;

public class MainActivity extends FragmentActivity {

String tag = this.getClass().getSimpleName();
@Override
protected void onCreate(Bundle savedInstanceState) {
    Log.i(tag, "onCreate");
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    /** Getting a reference to the ViewPager defined the layout file */
    ViewPager pager = (ViewPager) findViewById(R.id.pager);

    /** Getting fragment manager */
    FragmentManager fm = getSupportFragmentManager();

    /** Instantiating FragmentPagerAdapter */
    Fragment_Pager pagerAdapter = new Fragment_Pager(fm);

    /** Setting the pagerAdapter to the pager object */
    pager.setAdapter(pagerAdapter);

}
}

但我的问题是我不知道如何将片段添加到代码中。我想用按钮和东西滑动到下一个活动。我怎么做 ?

【问题讨论】:

标签: android android-viewpager swipe


【解决方案1】:

PageAdapter 使用你的getItem()Fragments 之间切换,你可以在这里声明哪个页面做什么。 “位置”0 是第一页,1 是第二页,依此类推。如果您愿意,您可以简单地返回另一个 Fragments 的新实例或传递参数。

例如:

@Override
public Fragment getItem(int position) {
    switch (position) {
    case 0:
        // Your current main fragment showing how to send arguments to fragment
        Fragment_control myFragment = new Fragment_control();
        Bundle data = new Bundle();
        data.putInt("current_page", position+1);
        myFragment.setArguments(data);
        return myFragment;
    case 1:
        // Calling a Fragment without sending arguments
        return new MySecondFragment();
    case 2:
        return new MyThirdFragment();
    default:
        return null;
    }
}

然后,您将为要合并的每个人创建一个Fragment 类。在我的示例中,您将有一个 MySecondFragmentMyThirdFragment 的类

public class MySecondFragment extends Fragment {

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.second_fragment, null); 
        return view;
    }

}

public class MyThirdFragment extends Fragment {

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.third_fragment, null); 
        return view;
    }

}

任何片段都可以简单地扩充一个标准的 xml 布局文件,要访问布局中的子项,您必须记住使用以下内容,我将使用 MySecondFragment 作为示例。

假设您在名为“second_fragment”的布局文件中有两个Buttons,ID 分别为R.id.button1R.id.button2

public class MySecondFragment extends Fragment {

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.second_fragment, null);

        // Make sure to add the parent inflater before and layout child call
        Button btn_one = (Button)view.findViewById(R.id.button1);
        Button btn_two = (Button)view.findViewById(R.id.button2);

        return view;
    }

}

编辑

要从0 或第一个位置以外的页面开始,您只需在MainAvticity 中使用setCurrentItem(),如下所示:

@Override
protected void onCreate(Bundle savedInstanceState) {
    Log.i(tag, "onCreate");
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    ViewPager pager = (ViewPager) findViewById(R.id.pager);
    FragmentManager fm = getSupportFragmentManager();
    Fragment_Pager pagerAdapter = new Fragment_Pager(fm);
    // Here you would declare which page to visit on creation
    pager.setAdapter(pagerAdapter);
    pager.setCurrentItem(1);

}

【讨论】:

  • 非常感谢!我已经环顾了2天,以解决我的问题! :)
  • 很高兴能帮上忙,祝你好运!
  • 但是如果我想从案例 2 开始呢?我是否应该将案例 0 的内容放入案例 2 中?
  • 对不起,我的意思是pager.setCurrentItem(1);。请参阅我的最新编辑以供参考。
  • 一个更正,看编辑,做pager.setCurrentItem(1); after setAdapter()。对此感到抱歉。
【解决方案2】:

我已经在片段类中添加了这个..

我遇到的问题是 cannot resolve cannot resolve get support fragment manager ()。

@Override
protected void onCreate(Bundle savedInstanceState) {
Log.i(tag, "onCreate");
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

ViewPager pager = (ViewPager) findViewById(R.id.pager);
FragmentManager fm = getSupportFragmentManager();
Fragment_Pager pagerAdapter = new Fragment_Pager(fm);
// Here you would declare which page to visit on creation
pager.setAdapter(pagerAdapter);
pager.setCurrentItem(1);

}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-08
    • 2012-11-17
    • 1970-01-01
    • 2017-12-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多