ViewPager + Fragment 仿微信滑动切换页卡

2023-05-16

1、新建类,继承Fragment --导入的是v4的包(向下兼容),利用布局加载器将其与xml结合起来


public class FragmentAddress extends Fragment {
    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View view=inflater.inflate(R.layout.address_layout,container,false);
        return view;
    }
}  

2、主布局类,继承FragmentActivity。使用FragmentPagerAdapter适配器加载页卡(数据源)


/**item(页面)切换的相应   */
 private void setPager() {
     main_viewpager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
         @Override
         public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

         }

         @Override
         public void onPageSelected(int position) {
             int currentItem=main_viewpager.getCurrentItem();   //取得当前的item(或是被点击的)
             setTab(currentItem);
         }

         @Override
         public void onPageScrollStateChanged(int state) {  

         }
     });
 }  

三、主布局的xml文件


<android.support.v4.view.ViewPager
    android:id="@+id/vp_main"
    android:layout_weight="1"
    android:layout_width="match_parent"
    android:layout_height="0dp">

</android.support.v4.view.ViewPager>

<include layout="@layout/tab" />	
--自定义的tab页卡标题--其中一部分
<LinearLayout
    android:id="@+id/ll_weixin"
    android:layout_weight="1"
    android:orientation="vertical"
    android:layout_width="0dp"
    android:layout_height="match_parent">
    <!--点击事件FALSE掉,不会和父布局冲突-->
    <ImageButton
        android:id="@+id/ib_weixin"
        android:clickable="false"
        android:layout_weight="3"
        android:background="@mipmap/tab_weixin_normal"
        android:layout_gravity="center"
        android:layout_width="wrap_content"
        android:layout_height="0dp" />
    <TextView
        android:text="微信"
        android:textSize="19sp"
        android:layout_gravity="center"
        android:textColor="#ffffff"
        android:gravity="center"
        android:layout_weight="2"
        android:layout_width="wrap_content"
        android:layout_height="0dp" />
</LinearLayout>


例子如下:  
  
  
//导入的为v4的fragment包
public class TabActivity extends FragmentActivity implements View.OnClickListener{

    private ViewPager main_viewpager;
    private FragmentPagerAdapter adapter_fragment;
    private List
     
     
      
       list_fragment;

    private LinearLayout weixin_ll;
    private LinearLayout address_ll;
    private LinearLayout setting_ll;
    private LinearLayout friend_ll;
//改变背景颜色和item 相互对应
    private ImageButton weixin_ib;
    private ImageButton address_ib;
    private ImageButton setting_ib;
    private ImageButton friend_ib;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main_tab);

        initView();
        initEvent();    //点击事件的初始化
        
    }
    /**点击事件的初始化  */
    private void initEvent() {
        weixin_ll.setOnClickListener(this);
        address_ll.setOnClickListener(this);
        setting_ll.setOnClickListener(this);
        friend_ll.setOnClickListener(this);
    }



    /**初始化控件  */
    private void initView() {
                //要把点击的属性FALSE掉,不会和父布局冲突
        weixin_ib= (ImageButton) findViewById(R.id.ib_weixin);
        address_ib= (ImageButton) findViewById(R.id.ib_address);
        friend_ib=  (ImageButton) findViewById(R.id.ib_friend);
        setting_ib= (ImageButton) findViewById(R.id.ib_setting);

        weixin_ll= (LinearLayout)  findViewById(R.id.ll_weixin);
        address_ll= (LinearLayout) findViewById(R.id.ll_address);
        friend_ll= (LinearLayout) findViewById(R.id.ll_friend);
        setting_ll= (LinearLayout) findViewById(R.id.ll_setting);

        main_viewpager= (ViewPager) findViewById(R.id.vp_main);

        //將fragment添加進數據源中
        list_fragment=new ArrayList<>();
        Fragment weixin_fragment=new FragmentWeixin();  //实例化一个Fragment子类对象--自定义的
        Fragment address_fragment=new FragmentAddress();
        Fragment friend_fragment=new FragmentFriend();
        Fragment setting_fragment=new FragmentSetting();

        list_fragment.add(weixin_fragment);         //加入数组中,,注意顺序
        list_fragment.add(address_fragment);
        list_fragment.add(friend_fragment);
        list_fragment.add(setting_fragment);


        initAdapter();  //初始化适配器
        main_viewpager.setAdapter(adapter_fragment);
        setPager();
        setTab(0);   //先默认第二个显示--不然一开始都是暗色的/-一起item改变


    }
/**对item(页面)切换的相应   */
    private void setPager() {
        main_viewpager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
            @Override
            public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

            }

            @Override
            public void onPageSelected(int position) {
                int currentItem=main_viewpager.getCurrentItem();   //取得当前的item(或是被点击的)
                setTab(currentItem);
            }

            @Override
            public void onPageScrollStateChanged(int state) {


            }
        });
    }

    //适配器初始化
    private void initAdapter() {
        adapter_fragment=new FragmentPagerAdapter(getSupportFragmentManager()) {
            @Override
            public Fragment getItem(int position) {
                return list_fragment.get(position);
            }

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

    /**每一个tab(LinearLayout)---的点击事件  */
    @Override
    public void onClick(View v) {
        resetImage();   //重置所有的imagebutton的背景颜色---暗色
        switch (v.getId()){
            case R.id.ll_weixin:
                setSelect(0);   //对点击事件作出具体的反应--传参数方法
             break;
            case R.id.ll_address:
                setSelect(1);   //对点击事件作出具体的反应--传参数方法
                break;
            case R.id.ll_friend:
                setSelect(2);   //对点击事件作出具体的反应--传参数方法
                break;
            case R.id.ll_setting:
                setSelect(3);   //对点击事件作出具体的反应--传参数方法
                break;
        }


    }
/**对传来的点击事件作出响应--图片改变/内容对应 */
    private void setSelect(int i) {

        setTab(i);
        main_viewpager.setCurrentItem(i);   //设置当前的item为点击的item
    }

/**根据传来的参数i做具体的相应    */
    private void setTab(int i) {
        resetImage();   //滑动时  重置所有的imagebutton的背景颜色---暗色
        switch (i){
            case 0:
                weixin_ib.setBackgroundResource(R.mipmap.tab_weixin_pressed);

              break;
            case 1:
                address_ib.setBackgroundResource(R.mipmap.tab_address_pressed);
              break;
            case 2:
                friend_ib.setBackgroundResource(R.mipmap.tab_find_frd_pressed);
              break;
            case 3:
                setting_ib.setBackgroundResource(R.mipmap.tab_settings_pressed);
              break;
        }
    }

    /**使所有的imagebutton的颜色变暗   */
    private void resetImage() {
        weixin_ib.setBackgroundResource(R.mipmap.tab_weixin_normal);
        address_ib.setBackgroundResource(R.mipmap.tab_address_normal);
        friend_ib.setBackgroundResource(R.mipmap.tab_find_frd_normal);
        setting_ib.setBackgroundResource(R.mipmap.tab_settings_normal);
    }
}package codefirst.materia_design.fragment;

import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;     //导入的是此包
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

import codefirst.materia_design.R;

//各个fragment类 --用来与xml布局文件关联起来
public class FragmentWeixin extends Fragment {
    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {

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

    }
}
     
     

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ViewPager + Fragment 仿微信滑动切换页卡 的相关文章

  • 从另一个 Fragment 更新 ViewPager 中的 TextView

    我正在尝试单击另一个片段上的按钮来更新片段中的 TextView 实际上 我对 Activity 实现了回调函数 并且它确实有效 因为 Logcat 报告 TextView 中的文本已更改 问题是第一个片段中显示的 Textview 没有更
  • Activity和Fragment之间如何进行回调?

    我的活动中有这个界面 public interface LogoutUser void logout 我的片段实现了这个接口 所以在我的片段中 我有这个 Override public void logout logout 在我的活动中我打
  • 在片段中初始化字体

    我有这一行 Typeface font Typeface createFromAsset getAssets fonts Delius Regular ttf but the getAssets 参数似乎带来了一些错误 它带有可怕的红线下划
  • 如何将文本视图从一个片段更新到另一个片段

    我有一个包含两个片段的活动 MainActivity Fragment1 有一个 EditText 和一个按钮 当用户按下按钮时 EditText 内的文本将被发送到只有 TextView 的 Fragment2 但我不太清楚如何将文本从
  • 当用户“滑出”viewpager 片段时运行代码?

    我需要检测用户何时从我的片段之一滑入和滑出 我尝试了 onPause 但似乎应用程序在滑到相邻屏幕时没有暂停 当将两个屏幕移开时它会被破坏 如果可能的话 我想从片段本身执行此操作 因为我正在动态更改片段 并且某些代码仅在存在某个片段时才有用
  • 该类型的方法 findViewById(int) 未定义

    我收到错误 PM section 类型的 findViewById int 方法未定义 当尝试实现我的 Expandable ListView 时 我确信这是一个常见错误 但我无法找到解决方案 我正在尝试学习片段之类的东西 从我开始以来 这
  • 当路径包含 url 片段时,如何在 Web 浏览器中打开本地 html 文件

    我正在尝试通过以下方法打开网络浏览器 然而 当浏览器打开 url 文件路径时 片段片段被破坏 从 anchorName 到 23anchorName 这似乎没有得到处理 所以基本上 文件打开但不会跳转到文档中的适当位置 有谁知道如何打开文件
  • 片段中的片段不刷新

    这是我的应用程序 带有片段 左侧有一个ListView 您可以在其中进行选择 如果您选择了右侧之一 则加载一个片段并将选项卡添加到 ActionBar 有这样的代码 import java util ArrayList import and
  • 交换卡片时无法更新片段文本

    我正在开发卡片刷卡和卡片翻转功能 并且我正在使用 ViewPager 和片段 我的问题是 当我从左到右或从右到左滑动卡片时 我无法更新片段内的 TextView 但是当我翻转卡片时 它会更新 UI 我尝试了互联网上可用的所有解决方案 但没有
  • 如何实现Android Fragment Transaction .add语法错误

    我想让我的 Android 应用程序使用 Fragment Transactions 这样我就可以 在各个 Fragment 之间切换会显示其关联列表 我的应用程序 在尝试转换为片段交易之前工作正常 在我最初的activity main x
  • FragmentTransaction 不执行任何操作

    我正在学习片段 下面给出的是我的第一个片段程序 一个简单的项目 我有两个屏幕 当我单击第一个屏幕的下一个按钮时 需要显示第二个按钮 我的目标是 Android 2 1 及更高版本使用兼容包 AppMainFragmentActivity j
  • 如何在方向改变后保留播放视频的片段片段的实例?

    我有一个 YouTube API 片段 静态添加到我的 xml 清单文件中 即内部包含 YouTube 播放器的片段 我的项目中没有扩展片段的文件 在我的活动类中 我将这行代码放在onCreate我的活动课 youTubePlayerFra
  • FragmentTransaction.remove 没有效果

    我的要求非常简单 我有一个按钮可以逐个片段地替换片段 这听起来很容易并且几乎可行 最大的问题是旧片段没有被删除 新片段被放置在旧片段的前面 并且它们在我的布局中 生活 在一起 代码 FragmentManager fragMgr a get
  • Fragmenttabhost 性能慢?

    我已经使用了v4 support lib for FragmentTabHost 要求是 当我将选项卡切换到另一个选项卡时 即调用 onCreateView 和 onActivityCreated 每次 这就是我的代码性能缓慢的原因 那么
  • Android可扩展列表视图片段

    我正在寻找具有可扩展列表视图的片段 搜索后我发现了一个实现可扩展列表视图片段的类https gist github com 1316903 https gist github com 1316903 但我不知道如何使用它 请帮我 我尝试了列
  • 如何通过单击 Android 中的 ImageView 从一个片段移动到另一个片段?

    我有一个图像视图 我想通过单击 Imageview 从一个片段移动到另一个片段 就像我们可以使用从一个活动移动到另一个活动一样 Intent i new Intent MainActivity this SecondActivity cla
  • 从片段调用片段

    我想通过单击当前片段中的按钮来调用当前片段中的另一个片段 这是我的主要活动 import android app FragmentManager import android os Bundle import android support
  • 如何在 Fragment 中使用 onNewIntent(Intent Intent) 方法?

    我正在尝试从我的设备使用 NFC 硬件 但是 问题是当我注册 Activity 来接收 Intent 时 PendingIntent pendingIntent PendingIntent getActivity this 0 new In
  • 从底部工作表对话框片段中获取值

    我从片段A开始bottomSheetDialogFragment 我想从该bottomSheetDialogFragment中选择日期 然后将其设置在片段A中 选择日期已经完成 我只想将其获取到片段A中以在某些字段中设置它 我怎样才能得到这
  • Fragment 生命周期和在不存在的 Fragment 上调用 onCreate 的问题

    我正在 Android 中测试片段 并且片段生命周期有一些令人困惑的行为 我有一个活动 在横向和纵向模式下使用 xml 布局 我有一些代码可以访问在片段布局之一中定义的 EditText 对象 如果我以横向模式启动应用程序 一切都会正常 我

随机推荐