0
package com.example.eiraj.listviewseefrgmentsfiirst;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {

    TextView textView= (TextView) findViewById(R.id.textView);

    public void show(View view){
        textView.setVisibility(View.VISIBLE);
    }

    public void hide(View view){
       textView.setVisibility(View.INVISIBLE);
    }

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

here two buttons are being used to show data and hide data but whenever I try to run it emulator shows the message unfortunately uihide stopped also I downloaded the apk to run it on my phone but same message came there

Jon
  • 9,156
  • 9
  • 56
  • 73
  • See also: http://stackoverflow.com/questions/36446114/why-android-app-crashes-for-initializing-variable-with-findviewbyidr-id – Mike M. Feb 01 '17 at 23:55

3 Answers3

1

Move TextView textView= (TextView) findViewById(R.id.textView); inside onCreate while keeping textView reference outside onCreate because before the execution of onCreate there is no layout attached to your activity , hence the issue

TextView textView;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    textView= (TextView) findViewById(R.id.textView);
}

Then your MainActivity.java will be

public class MainActivity extends AppCompatActivity {

    TextView textView;

    public void show(View view){
        textView.setVisibility(View.VISIBLE);
    }

    public void hide(View view){
       textView.setVisibility(View.INVISIBLE);
    }


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        textView= (TextView) findViewById(R.id.textView);
    }

}

Plus you can also use textView.setVisibility(View.GONE); if you want to completely make your view invisible

Pavneet_Singh
  • 36,884
  • 5
  • 53
  • 68
0

Attach your TextView inside onCreate():

package com.example.eiraj.listviewseefrgmentsfiirst;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {
public TextView textView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    textView= (TextView) findViewById(R.id.textView);        
    }       

    public void show(View view){
        textView.setVisibility(View.VISIBLE);
    }

    public void hide(View view){
        textView.setVisibility(View.INVISIBLE);
    }               
}
W4R10CK
  • 5,502
  • 2
  • 19
  • 30
0

We can't initialize Views before setContentView() is called and it is compulsory to call setContentView() inside onCreate() method.

Do like this:

 @Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    textView= (TextView) findViewById(R.id.textView);
}
Pavneet_Singh
  • 36,884
  • 5
  • 53
  • 68
DevThapa
  • 173
  • 2
  • 12