0

1] I am not able to access contents of toolbar. I have created toolbar.xml layout and I am adding it in required layouts like this.

toolbar.xml

 <?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.Toolbar xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/toolbar"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_alignParentTop="true"
    android:background="@color/colorPrimary"
    android:minHeight="?attr/actionBarSize">

    <ImageView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/bitcoin_logo" />

    <TextView
        android:id="@+id/toolbar_txt_title"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="34dp"
        android:text="gfdssfgfg"
        android:textColor="@color/colorToolbarText"
        android:textSize="@dimen/default_text_size"
        android:visibility="gone" />

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

mainlayout.xml is

    <?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@drawable/side_nav_bar">

    <include
        android:id="@+id/appbar"
        layout="@layout/toolbar"></include>

    <ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/scrollView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_above="@+id/btn_buy"
        android:layout_below="@+id/appbar"
        android:fillViewport="true"
        android:fitsSystemWindows="true">

        <!-- stuff-->
    </ScrollView>

    <android.support.v7.widget.AppCompatButton
        android:id="@+id/btn_buy"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_weight="1"
        android:background="#2e7826"
        android:gravity="center"
        android:hint="Ask"
        android:textColor="@color/colorWhite"
        android:textColorHint="@color/colorWhite"
        android:textSize="@dimen/BTC_title_size" />
</RelativeLayout>

When I tried to access the contents of toolbar then it gives me an error

 Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'android.view.View android.view.View.findViewById(int)' on a null object reference
                                                                              at com.kiran.example.ebitcoin.activity.ActivityAsk.onCreate(ActivityAsk.java:26)
                                                                              at android.app.Activity.performCreate(Activity.java:6977)
                                                                              at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1126)
                                                                              at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2946)
                                                                              at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3064) 
                                                                              at android.app.ActivityThread.-wrap14(ActivityThread.java) 
                                                                              at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1659) 
                                                                              at android.os.Handler.dispatchMessage(Handler.java:102) 
                                                                              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:1563) 
                                                                              at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1451) 

2] I want to add back button on the action bar so I set

getSupportActionBar().setDisplayShowHomeEnabled(true);
 getSupportActionBar().setDisplayHomeAsUpEnabled(true);

then it throws the following exception

Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.support.v7.app.ActionBar.setDisplayShowHomeEnabled(boolean)' on a null object reference
                                                                          at com.kiran.example.ebitcoin.activity.ActivityAsk.onCreate(ActivityAsk.java:28)
                                                                          at android.app.Activity.performCreate(Activity.java:6977)
                                                                          at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1126)
                                                                          at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2946)
                                                                          at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3064) 
                                                                          at android.app.ActivityThread.-wrap14(ActivityThread.java) 
                                                                          at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1659) 
                                                                          at android.os.Handler.dispatchMessage(Handler.java:102) 
                                                                          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:1563) 
                                                                          at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1451) 

My .java code is

   public class ActivityAsk extends AppCompatActivity {

    Toolbar toolbar;
    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        toolbar = (Toolbar)findViewById(R.id.appbar);
        setSupportActionBar(toolbar);
        TextView txt = (TextView) toolbar.findViewById(R.id.toolbar_txt_title);
        txt.setText("text");  //exception 1
        getSupportActionBar().setDisplayShowHomeEnabled(true);//exception 2
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);//exception 2

        setContentView(R.layout.activity_ask);
    }
}
  • 1
    `setContentView(R.layout.activity_ask);` should be at above of `toolbar = (Toolbar)findViewById(R.id.appbar);` – Abhishek Singh Dec 13 '17 at 07:08
  • 1
    `setContentView` should first. – IntelliJ Amiya Dec 13 '17 at 07:09
  • Also change toolbar = (Toolbar)findViewById(R.id.appbar); to toolbar = (Toolbar)findViewById(R.id.toolbar); as R.id.toolbar is actual id for Toolbar View – adityakamble49 Dec 13 '17 at 07:10
  • When you have used `include` tag in xml please follow this link might be helpful you https://stackoverflow.com/a/3772033/2925399 –  Dec 13 '17 at 07:13
  • @adityakamble49 The `id` on the `` overrides the `id` of the root `View` in the included layout, so that `Toolbar` will actually end up with `id` `appbar`. – Mike M. Dec 13 '17 at 07:15
  • 1
    @MikeM. Oh, I used to wrap Toolbar in layout so habit of using its id for finding View. Thanks for the insight – adityakamble49 Dec 13 '17 at 07:17

1 Answers1

0

set line setContentView(R.layout.activity_ask); before initialize TextView and Toolbar try below code

    public class ActivityAsk extends AppCompatActivity {

    Toolbar toolbar;
    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_ask);//change here
        toolbar = (Toolbar)findViewById(R.id.appbar);
        setSupportActionBar(toolbar);
        TextView txt = (TextView) toolbar.findViewById(R.id.toolbar_txt_title);
        txt.setText("text");  //exception 1
        getSupportActionBar().setDisplayShowHomeEnabled(true);//exception 2
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);//exception 2


    }
}
Omkar
  • 3,040
  • 1
  • 22
  • 42