<少女> 2022-11-24 04:52 采纳率: 90.9%
浏览 16
已结题

我就是想写一个只有tab导航的actionbar,为什么这里报错啊?我哪里写错了?求解,详解必采纳


ackage com.example.studytest03;

import android.app.ActionBar;
import android.app.Activity;
import android.app.FragmentTransaction;

import androidx.fragment.app.Fragment;

/*
实现各个标签页之间的切换的
 */
public class myTabListener implements ActionBar.TabListener {
    private  final Activity activity;//用来指定要加载的activity
    private final Class aClass;//用来指定加载的Fragment所对应的类
    private Fragment fragment;//用来定义Fragment对象
    public myTabListener(Activity activity, Class aClass) {
        this.activity = activity;
        this.aClass = aClass;
    }
//被选择时
    @Override
    public void onTabSelected(ActionBar.Tab tab, FragmentTransaction ft) {
        if(fragment==null){
            fragment=Fragment.instantiate(activity,aClass.getName());
        ft.add(android.R.id.content.fragment,null);
        }
        ft.attach(fragment);//现实新页面
    }
//退出选择状态
    @Override
    public void onTabUnselected(ActionBar.Tab tab, FragmentTransaction ft) {
        if(fragment!=null){
            ft.detach(fragment);//删除旧页面
        }
    }

    @Override
    public void onTabReselected(ActionBar.Tab tab, FragmentTransaction ft) {

    }
}
package com.example.studytest03;

import androidx.appcompat.app.ActionBar;
import androidx.appcompat.app.AppCompatActivity;
import androidx.fragment.app.Fragment;

import android.os.Bundle;

public class MainActivity2 extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main2);
        //设置actionbar为选项卡模式,并将标签页面添加到actionbar中
        ActionBar actionBar=getSupportActionBar();//获取actionbar对象
        actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);//设置actionbar为选项卡模式
        actionBar.setDisplayOptions(0,ActionBar.DISPLAY_SHOW_TITLE);//隐藏标题栏
        actionBar.addTab(actionBar.newTab().setText("词典").
                setTabListener((ActionBar.TabListener) new myTabListener(this, Fragment1.class)));//添加第一个标签栏
        actionBar.addTab(actionBar.newTab().setText("百科").
                setTabListener((ActionBar.TabListener) new myTabListener(this, Fragment2.class)));
        actionBar.addTab(actionBar.newTab().setText("我的").
                setTabListener((ActionBar.TabListener) new myTabListener(this, Fragment3.class)));
    }
}

为什么这里报错啊?

img


我就是想写一个只有tab导航的actionbar,为什么这里报错啊?我哪里写错了?求解,详解必采纳

img

展开全部

  • 写回答

2条回答 默认 最新

  • 头发还没秃a 2022-11-24 08:05
    关注

    ft.attach() 接收的 fragment 是 android.app.Fragment 包里面的 Fragment,而你定义的 fragment 是 androidx.fragment.app.Fragment 包里面的,只需要把 import androidx.fragment.app.Fragment; 改为 import android.app.Fragment; 就行了

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
    <少女> 2022-11-29 13:37

    谢谢,没有拔错了,但是我显示不出来,我运行的时候,运行不出来,但是没有报错。请问是我哪里还写错了吗?

    回复
    <少女> 2022-11-29 13:39

    我的activity_main没有写任何东西。我不知道怎么写。请问该怎么写啊

    img

    img

    回复
    头发还没秃a 回复 <少女> 2022-11-30 02:42

    ft.add(android.R.id.content.fragment,null);
    

    这一句作用是把你的 Fragment 添加到你要显示的容器所在的里面,而你是把一个 null 添加到系统定义的 R.id.content.fragment 容器里面,最好按下面这样修改:

    activity_main.xml:

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout
            xmlns:android="http://schemas.android.com/apk/res/android"
            xmlns:tools="http://schemas.android.com/tools"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:id="@+id/container"
            android:orientation="vertical"
            tools:context=".MainActivity">
    
    </LinearLayout>
    

    MyTabListener.java:

    @Override
    public void onTabSelected(ActionBar.Tab tab, FragmentTransaction ft) {
        if(fragment==null){
            fragment=Fragment.instantiate(activity,aClass.getName());
            ft.add(R.id.container, fragment);
        }
        ft.attach(fragment);//现实新页面
    }
    

    回复
    展开全部4条评论
查看更多回答(1条)
编辑
预览

报告相同问题?

问题事件

  • 系统已结题 2月28日
  • 已采纳回答 2月21日
  • 创建了问题 11月24日
手机看
程序员都在用的中文IT技术交流社区

程序员都在用的中文IT技术交流社区

专业的中文 IT 技术社区,与千万技术人共成长

专业的中文 IT 技术社区,与千万技术人共成长

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

客服 返回
顶部