簡體   English   中英

工具欄后退按鈕錯誤Android

[英]toolbar back button error Android

我想在我創建的工具欄中添加一個Back按鈕,因為我刪除了默認的按鈕以使用一些選項卡獲得材質設計效果,但每次我添加代碼以使該按鈕出現時,Android都會給出一個例外說明:

E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.juan.sdfnsdfnskdfnskdfmsfd, PID: 13348
java.lang.NullPointerException: Attempt to invoke virtual method 'int android.support.v4.widget.DrawerLayout.getDrawerLockMode(int)' on a null object reference
at android.support.v7.app.ActionBarDrawerToggle.toggle(ActionBarDrawerToggle.java:284)
at android.support.v7.app.ActionBarDrawerToggle$1.onClick(ActionBarDrawerToggle.java:202)
at android.view.View.performClick(View.java:6308)
at android.view.View$PerformClick.run(View.java:23969)
at android.os.Handler.handleCallback(Handler.java:751)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6823)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1557)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1445)

如果我只在我創建的工具欄中編寫相應的代碼,我不明白使用null對象引用意味着什么。

這是toolbar.xml:

<android.support.v7.widget.Toolbar 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="wrap_content"
android:background="@color/toolbar_morado"
android:id="@+id/toolbar_lista_compras"
android:minHeight="?attr/actionBarSize">

<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">

<TextView
    android:id="@+id/contador_toolbar"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Lista de compras"
    android:textSize="18sp"
    android:textColor="#ffffff"/>

</RelativeLayout>

</android.support.v7.widget.Toolbar>

這是我實現工具欄的地方:

<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="match_parent"
android:orientation="vertical">

    <android.support.design.widget.AppBarLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
        android:id="@+id/appBarLayoutCalcular">

        <include layout="@layout/toolbar"></include>

        <android.support.design.widget.TabLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:id="@+id/tablayoutCalcular"
            app:tabGravity="fill"
            app:tabMode="fixed"
            android:background="@color/toolbar_anaranjado"
            app:tabTextAppearance="@style/myTabSize"
            app:tabIndicatorColor="#5c1be1"/>

    </android.support.design.widget.AppBarLayout>

    <android.support.v4.view.ViewPager
        android:id="@+id/viewPagerCalcular"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

</LinearLayout>

這是我的班級:

public class CalculateMaterials extends AppCompatActivity{

DrawerLayout drawerLayout;
ActionBarDrawerToggle actionBarDrawerToggle;
Toolbar toolbar;
NavigationView navigationView;
TabLayout tabLayout;
ViewPager viewPager;
ViewPagerAdapter viewPagerAdapter;
String tabSeleccionado;

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

    toolbar = (Toolbar)findViewById(R.id.toolbar_shopping_list);
    toolbar.setBackgroundColor(ContextCompat.getColor(getApplicationContext(), R.color.toolbar_anaranjado));
    setSupportActionBar(toolbar);

    // text for the toolbar
    TextView textoToolbar = (TextView)findViewById(R.id.contador_toolbar);
    textoToolbar.setText("Calcular los materiales");

    // status bar color
    if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {

        getWindow().setStatusBarColor(ContextCompat.getColor(getApplicationContext(), R.color.statusBar_anaranjado));

    }


    // adding toolbar back button
    // this is where I have the error 
    if (toolbar != null) {
        toolbar.setNavigationIcon(R.drawable.backButton);
        toolbar.setNavigationOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                onBackPressed();
            }
        });
    }

    drawerLayout = (DrawerLayout)findViewById(R.id.drawer_layout);

    actionBarDrawerToggle = new ActionBarDrawerToggle(this, drawerLayout, toolbar, R.string.drawer_open, R.string.drawer_close);

    navigationView = (NavigationView)findViewById(R.id.navigationView);

    tabLayout = (TabLayout)findViewById(R.id.tablayoutCalcular);

    viewPager = (ViewPager)findViewById(R.id.viewPagerCalcular);

    // adding the tabs
    viewPagerAdapter = new ViewPagerAdapter(getSupportFragmentManager());
    viewPagerAdapter.addFragments(new FragmentCalcular(), "Con area");
    viewPagerAdapter.addFragments(new FragmentCalcular2(), "Con metros");

    viewPager.setAdapter(viewPagerAdapter);

    tabLayout.setupWithViewPager(viewPager);

我也嘗試:

// add back arrow to toolbar
if (getSupportActionBar() != null){
    getSupportActionBar().setDisplayHomeAsUpEnabled(true);
    getSupportActionBar().setDisplayShowHomeEnabled(true);
}

這也給出了同樣的錯誤。

那么,任何人都可以幫我解決這個問題嗎?

編輯

感謝所有試圖幫助我解決這個問題的人。 我終於找到了錯誤。

前段時間,我試圖在所有活動中添加一個navigationView,但是我忘了在類中刪除必要的代碼,這就是為什么drawerLayout沒有出現在xml中。

所以,當我刪除drawerLayout變量時,一切正常!

嘗試這個

    toolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);

    getSupportActionBar().setDisplayHomeAsUpEnabled(true);
    toolbar.setNavigationOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            onBackPressed();
        }
    });

嘗試這個。

   toolbar = (Toolbar) findViewById(R.id.toolbar_editprofile);
    setSupportActionBar(toolbar);
    getSupportActionBar().setDisplayShowTitleEnabled(false):
    toolbar.setNavigationIcon(getResources().getDrawable(R.drawable.back_arrow));
    toolbar.setNavigationOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            finish();
        }
    });

看起來像drawerLayout是null 我無法在XML中找到您的“drawer_layout”。

確保在findViewById(R.id.drawer_layout)和布局文件中為導航抽屜使用相同的ID。

第一件事你的DrawerLayout在哪里? 我無法從您的問題中找到它可能是您忘記發布或尚未創建。

確保你必須為DrawerLayout聲明正確的ID ,所以檢查drawerLayout = (DrawerLayout)findViewById(R.id.drawer_layout); of drawer_layout.xml

錯誤行:我發現此行中的錯誤可能不是您的答案,但應該糾正您

TextView textoToolbar = (TextView)findViewById(R.id.contador_toolbar);

嘗試這個

toolbar = (Toolbar)findViewById(R.id.toolbar_shopping_list);
    toolbar.setBackgroundColor(ContextCompat.getColor(getApplicationContext(), R.color.toolbar_anaranjado));
    setSupportActionBar(toolbar);


    // text for the toolbar
    TextView textoToolbar = (TextView)toolbar.findViewById(R.id.contador_toolbar);
    textoToolbar.setText("Calcular los materiales");

在onCreate方法粘貼這個:

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

     Toolbar   toolbar = (Toolbar) findViewById(R.id.toolBarGig);
        setSupportActionBar(toolbar);
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);
        getSupportActionBar().setDisplayShowHomeEnabled(true);
        getSupportActionBar().setDisplayShowTitleEnabled(false);

在此之后你必須覆蓋方法: -

@Override
    public boolean onSupportNavigateUp() {
        onBackPressed();
        return true;
    }

嘗試這個。 希望它會幫助你!

首先初始化工具欄欄以顯示后退按鈕

 Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
            setSupportActionBar(toolbar);
          getSupportActionBar().setDisplayHomeAsUpEnabled(true);

然后回調按鈕方法這個代碼足以轉到上一個活動,否則你可以在onBackPressed方法中使用intent方法返回

//單擊后退按鈕的方法

@Override
public void onBackPressed() {

    super.onBackPressed();

/*OR
  Intent forgot_password = new Intent( AddItemActivity.this,  HomeActivity.class);
                startActivity(forgot_password);
                finish();
        }*/

后退按鈕單擊功能

 @Override
  public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case android.R.id.home:
            onBackPressed();

            return true;

        default:
            return super.onOptionsItemSelected(item);
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM