почему приложение вылетает, когда я использую onclicklistener с Fragment? - PullRequest
0 голосов
/ 25 июня 2018
public class MainActivity extends AppCompatActivity {


    Context context;
    LinearLayout menuClcick,gallerClcik,eventsClick;
    LayoutInflater inflater;`enter code here`


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //we don't need to set view, our fragment will handle it

        setPointer();
        //Fragment Manger
        FragmentManager fm = getFragmentManager();
        //create instance of Fragment Transaction to handle fragment replace and animation
        FragmentTransaction ft=fm.beginTransaction();

        int displayMode = getResources().getConfiguration().orientation;
        Log.e("WTF", "onCreate: "+displayMode );
        //choose which fragment to display according to screen orientation
        if (displayMode==1) //portrait
        {

// that's the Fragment that I use to display a layout in the portrait and other layout in the landscape// 

            //create instance of our portrait fragment
            Fragment1 f1=new Fragment1();
            //change content of the screen to our new fragment
            ft.replace(android.R.id.content,f1);
        }
        else
        {
            Fragment2 f2=new Fragment2();
            ft.replace(android.R.id.content,f2);
        }
        //choose animation
        ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
        //commit our changes
        ft.commit();
    }

    private void setPointer() {
        this.context=this;
        menuClcick=findViewById(R.id.menuClick);
        gallerClcik=findViewById(R.id.gallerClcik);
        eventsClick=findViewById(R.id.eventsClick);

//this is the problem the app have no problem to find the buttons but it stops working when I try to put onclick listener in it//

        menuClcick.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Toast.makeText(context, "portrait", Toast.LENGTH_SHORT).show();
            }
        });
    }

1 Ответ

0 голосов
/ 25 июня 2018

Вы пытаетесь получить доступ к представлениям, которые еще не созданы. Как показывает жизненный цикл документации , вы должны реализовать onCreateView() для раздувания макета, и только там у вас есть доступ к R.id.menuClick.

Таким образом, вы должны вызвать ваш метод setPointer() для onCreateView().

...