Nullpointerexception на кнопке в панели навигации (Фрагмент и Android) - PullRequest
0 голосов
/ 10 сентября 2018

У меня есть проблема, которую я не могу решить. У меня есть панель навигации, которая настроена как фрагменты. Я прикреплю код для "R.id.nav_kontakt", так как здесь ошибка. Как я понимаю, для кнопки контакт есть исключение nullpointerexception, но когда я читаю код, я должен быть внутри фрагмента в тот момент, когда я вызываю код кнопки, и поэтому кнопка не должна быть нулевой. Очевидно, что я не прав, поэтому я был бы признателен, если бы вы могли сказать мне, как исправить эту ошибку, и, возможно, даже научить меня, как избежать этого в будущем.

 public void sendMail() {

    //String recipientList = kontaktTekst.getText().toString();
    //String[] recipients = recipientList.split(",");

    String message = kontaktTekst.getText().toString();

    Intent intent = new Intent( Intent.ACTION_SEND );
    intent.putExtra( Intent.EXTRA_EMAIL, new String[]{"xxx.com"} );
    intent.putExtra( Intent.EXTRA_SUBJECT, "xxx" );
    intent.putExtra( Intent.EXTRA_TEXT, message );

    intent.setType( "message/rfc822" );

    startActivity( Intent.createChooser( intent, "Vælg en email klient" ) );

    intent.setData( Uri.parse( "mailto:" ) );
}


    @RequiresApi(api = Build.VERSION_CODES.M)
@SuppressWarnings("StatementWithEmptyBody")
@Override
 public boolean onNavigationItemSelected(MenuItem item) {

        int id = item.getItemId();

if (id == R.id.nav_kontakt) {

            Toast.makeText( this, "Kontakt os her", Toast.LENGTH_SHORT ).show();

            android.support.v4.app.FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
            ft.replace( R.id.flMain, new KontaktFragment() );
            ft.commit();

            kontaktTekst = (EditText) findViewById( R.id.kontaktEdit );
            kontaktSend = (Button) findViewById( R.id.kontaktButton );

            kontaktSend.setOnClickListener( new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    sendMail();
                }
            } );

        }
}
        DrawerLayout drawer = (DrawerLayout) findViewById( R.id.drawer_layout );
        drawer.closeDrawer( GravityCompat.START );
        return true;
    }

Исключение составляют следующие:

09-10 16:07:57.729 30571-30571/com.example.yusuf.cxweb E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.yusuf.cxweb, PID: 30571
java.lang.NullPointerException: Attempt to invoke virtual method 'android.view.View android.app.Fragment.getView()' on a null object reference
    at com.example.yusuf.cxweb.MainActivity.onNavigationItemSelected(MainActivity.java:727)
    at android.support.design.widget.NavigationView$1.onMenuItemSelected(NavigationView.java:154)
    at android.support.v7.view.menu.MenuBuilder.dispatchMenuItemSelected(MenuBuilder.java:822)
    at android.support.v7.view.menu.SubMenuBuilder.dispatchMenuItemSelected(SubMenuBuilder.java:89)
    at android.support.v7.view.menu.MenuItemImpl.invoke(MenuItemImpl.java:171)
    at android.support.v7.view.menu.MenuBuilder.performItemAction(MenuBuilder.java:973)
    at android.support.design.internal.NavigationMenuPresenter$1.onClick(NavigationMenuPresenter.java:342)
    at android.view.View.performClick(View.java:6294)
    at android.view.View$PerformClick.run(View.java:24770)
    at android.os.Handler.handleCallback(Handler.java:790)
    at android.os.Handler.dispatchMessage(Handler.java:99)
    at android.os.Looper.loop(Looper.java:164)
    at android.app.ActivityThread.main(ActivityThread.java:6494)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807)

Цените все усилия, чтобы помочь мне!

** ОБНОВЛЕНИЕ **

Я прилагаю фрагмент кода здесь

    package com.example.yusuf.cxweb;


import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;


/**
 * A simple {@link Fragment} subclass.
 */
public class KontaktFragment extends Fragment {


    public KontaktFragment() {
        // Required empty public constructor
    }


    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        return inflater.inflate(R.layout.fragment_kontakt, container, false);
    }

}

1 Ответ

0 голосов
/ 10 сентября 2018

возможно, R.id.kontaktButton определен в макете фрагмента R.layout.fragment_kontakt, но мы находим его в основном макете?

 kontaktSend = (Button) findViewById( R.id.kontaktButton );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...