tph9 2021-03-27 02:18 采纳率: 50%
浏览 81
已采纳

安卓开发小白,学习实现简单登录注册功能的时候遇到了个问题

用的是as3.5.2版本默认的Navigation drawer activity,想在滑动菜单的顶部添加一个跳转到登录界面的button控件,但是调试时点击按钮程序会闪退

获取button的代码

public class MainActivity extends AppCompatActivity {

    private AppBarConfiguration mAppBarConfiguration;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Toolbar toolbar = findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);
        DrawerLayout drawer = findViewById(R.id.drawer_layout);
        NavigationView navigationView = findViewById(R.id.nav_view);
        mAppBarConfiguration = new AppBarConfiguration.Builder(
                R.id.nav_quit, R.id.nav_borrowed, R.id.nav_collect,
                R.id.nav_admin, R.id.nav_home)
                .setDrawerLayout(drawer)
                .build();
        NavController navController = Navigation.findNavController(this, R.id.nav_host_fragment);
        NavigationUI.setupActionBarWithNavController(this, navController, mAppBarConfiguration);
        NavigationUI.setupWithNavController(navigationView, navController);
        //初始化数据库
        Dbhelper helper = new Dbhelper(MainActivity.this);
        SQLiteDatabase db = helper.getWritableDatabase();
        //跳转登录
        View headerView = navigationView.getHeaderView(0);
        Button log=headerView.findViewById(R.id.loginbutton);
        log.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                        Intent intent = new Intent();
                        intent.setClass(MainActivity.this, logandregActivity.class);
                        startActivity(intent);
                        finish();
                }
            });

button的属性

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="@dimen/nav_header_height"
    android:background="@drawable/side_nav_bar"
    android:gravity="bottom"
    android:orientation="vertical"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:theme="@style/ThemeOverlay.AppCompat.Dark">

    <Button
        android:id="@+id/loginbutton"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="点击登录"
        />

    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:paddingTop="@dimen/nav_header_vertical_spacing"
        android:text="@string/nav_header_title"
        android:textAppearance="@style/TextAppearance.AppCompat.Body1" />

    <TextView
        android:id="@+id/textView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/nav_header_subtitle" />


</LinearLayout>

跳转的页面

public class logandregActivity extends Activity {
    Button loginbutton=(Button)findViewById(R.id.log_log);
    Button regbutton=(Button)findViewById(R.id.log_reg);
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_login);
        regbutton.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                Intent intent = new Intent();
                intent.setClass(logandregActivity.this, regActivity.class);
                startActivity(intent);
            }
        });

    }
}

不知道是哪里出错了,希望大佬们能解答小弟的疑惑!

  • 写回答

3条回答 默认 最新

  • qq_1113502097 2021-03-31 10:16
    关注

    调转的界面问题,你的

    Button loginbutton=(Button)findViewById(R.id.log_log);

    Button regbutton=(Button)findViewById(R.id.log_reg);

    初始化位置怎么在类里面去了,根据程序运行,创建类->创建类属性->依次调用生命周期。也就是你在初始化在生命周期之前,布局都没有加载进来,你怎么能调用findViewById(R.id.log_log);

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 Stata链式中介效应代码修改
  • ¥15 latex投稿显示click download
  • ¥15 请问读取环境变量文件失败是什么原因?
  • ¥15 在若依框架下实现人脸识别
  • ¥15 添加组件无法加载页面,某块加载卡住
  • ¥15 网络科学导论,网络控制
  • ¥15 利用Sentinel-2和Landsat8做一个水库的长时序NDVI的对比,为什么Snetinel-2计算的结果最小值特别小,而Lansat8就很平均
  • ¥15 metadata提取的PDF元数据,如何转换为一个Excel
  • ¥15 关于arduino编程toCharArray()函数的使用
  • ¥100 vc++混合CEF采用CLR方式编译报错