Продолжайте получать нулевую ссылку на findViewById - PullRequest
0 голосов
/ 01 июня 2018

Я пытаюсь открыть и закрыть ящик навигации с помощью ImageButton в Android Studio.Моя трудность заключается в том, что я не могу использовать определенные методы, потому что я нахожусь внутри фрагментированного подкласса.Это ошибка, которую я получаю.

Причина: java.lang.NullPointerException: Попытка вызвать виртуальный метод 'android.view.View android.view.View.findViewById (int)' нассылка на пустой объект в dadump.test.HomeFragment.onCreateView (HomeFragment.java:27)

Вот мой код, в котором вызывается ошибка. У меня также есть метод open () вмоя домашняя деятельность, которая имеет только одну строку: mDrawerLayout.openDrawer(Gravity.LEFT);.

public class HomeFragment extends Fragment {

private DrawerLayout mDrawerLayout;
private ActionBarDrawerToggle mToggle;

@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
    View View = inflater.inflate(R.layout.fragment_home, null);

    ImageButton button = (ImageButton)getView().findViewById(R.id.button_settings);
    button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(android.view.View view) {
            ((MainActivity)getActivity()).open();
        }
    });
    return View;
    }
}

Основной класс:

    public class MainActivity extends AppCompatActivity implements BottomNavigationView.OnNavigationItemSelectedListener {

    private DrawerLayout mDrawerLayout;

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

        BottomNavigationView navigation =findViewById(R.id.navigation);
        navigation.setOnNavigationItemSelectedListener(this);

        setupBottomNavigationView();
        loadFragment(new HomeFragment());


    }

    private void setupBottomNavigationView(){
        BottomNavigationViewEx bottomNavigationViewEx = (BottomNavigationViewEx)findViewById(R.id.navigation);
        BottomNavigationViewHelper.setupBottomNavigationView(bottomNavigationViewEx);
    }

    private boolean loadFragment(android.support.v4.app.Fragment fragment) {

        if(fragment != null){

            getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, fragment).commit();

            return true;
        }
        return false;
    }

    @Override
    public boolean onNavigationItemSelected(@NonNull MenuItem item) {

        android.support.v4.app.Fragment fragment = null;

        switch(item.getItemId()){
            case R.id.ic_home:
                fragment = new HomeFragment();
                break;
            case R.id.ic_directMessage:
                fragment = new DirectMessageFragment();
                break;
            case R.id.ic_newPost:
                fragment = new NewPostFragment();
                break;
            case R.id.ic_notifications:
                fragment = new NotificationsFragment();
                break;
            case R.id.ic_userProfile:
                fragment = new UserProfileFragment();
                break;
        }

        return loadFragment(fragment);
    }

    public void open() {
        mDrawerLayout.openDrawer(Gravity.LEFT);
    }
}

1 Ответ

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

In onCreateView getView() еще не инициализировано.Вот почему эта проблема создана.Попробуйте использовать view вместо getView().Если вы хотите получить данные из getView(), переместите этот код в метод onViewCreated() @Override.

 View view = inflater.inflate(R.layout.fragment_home, null);

ImageButton button = (ImageButton)view.findViewById(R.id.button_settings);

Это решит вашу проблему.

...