我无法点击我的导航抽屉

时间:2017-07-17 10:02:52

标签: android navigation-drawer

我正在努力让导航抽屉项目注册并启动和开展新活动。抽屉打开正常并正确显示但是当我点击列表中的项目时没有任何反应。这是我的代码

package radiofm.arabel;

import android.app.ProgressDialog;
import android.content.Intent;
import android.media.AudioManager;
import android.media.MediaPlayer;
import android.os.AsyncTask;
import android.os.Bundle;
import android.support.design.widget.FloatingActionButton;
import android.support.design.widget.Snackbar;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentTransaction;
import android.util.Log;
import android.view.View;
import android.support.design.widget.NavigationView;
import android.support.v4.view.GravityCompat;
import android.support.v4.widget.DrawerLayout;
import android.support.v7.app.ActionBarDrawerToggle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.Button;
import android.widget.ImageButton;

import static android.widget.AbsListView.OnScrollListener.SCROLL_STATE_IDLE;

public class MainActivity extends AppCompatActivity
        implements NavigationView.OnNavigationItemSelectedListener {

    ImageButton id_play,id_pause;

    private Button btn;
    private boolean playPause;
    private MediaPlayer mediaPlayer;
    private ProgressDialog progressDialog;
    private boolean initialStage = true;


    FragmentTransaction fragmentTransaction;
    NavigationView navigationView;






    private DrawerLayout mDrawerLayout;
    private ActionBarDrawerToggle mToggle;



    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);
        Log.d("myTag", "This is my toolbar");


        id_play = (ImageButton) findViewById(R.id.id_play);
        mediaPlayer = new MediaPlayer();
        mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
        progressDialog = new ProgressDialog(this);
        id_play.setEnabled(true);
        id_play.setImageResource(R.drawable.play);
        id_play.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                if (!playPause) {
                    id_play.setImageResource(R.drawable.pause);

                    if (initialStage) {
                        Log.d("myTag", "This is my excute");
                        new Player().execute("http://arabelfm.ice.infomaniak.ch/arabelprodcastfm.mp3");
                    } else {
                        Log.d("myTag", "This is my beforestart");

                        if (!mediaPlayer.isPlaying())
                            Log.d("myTag", "This is my afterstart");

                        mediaPlayer.start();
                    }

                    playPause = true;

                } else {
                    id_play.setImageResource(R.drawable.play);
                    Log.d("myTag", "This is my beforestop");

                    if (mediaPlayer.isPlaying()) {
                        Log.d("myTag", "This is afterstop");

                        mediaPlayer.reset();

                    }

                    playPause = false;
                }
            }
        });




        DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
        ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
                this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close);
        drawer.setDrawerListener(toggle);
        toggle.syncState();

        NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view);
        navigationView.setNavigationItemSelectedListener(this);
    }

    @Override
    protected void onPause() {
        super.onPause();

        if (mediaPlayer != null) {
            mediaPlayer.reset();
            mediaPlayer.release();
            mediaPlayer = null;
        }
    }



    class Player extends AsyncTask<String, Void, Boolean> {
        @Override
        protected Boolean doInBackground(String... strings) {
            Boolean prepared = false;

            try {
                mediaPlayer.setDataSource(strings[0]);
                mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
                    @Override
                    public void onCompletion(MediaPlayer mediaPlayer) {
                        Log.d("myTag", "This is my listnner");
                        initialStage = true;
                        playPause = false;
                        id_play.setImageResource(R.drawable.play);
                        mediaPlayer.stop();
                        mediaPlayer.reset();
                    }
                });

                mediaPlayer.prepare();
                prepared = true;

            } catch (Exception e) {
//                Log.e("MyAudioStreamingApp", e.getMessage());
                prepared = false;
            }

            return prepared;
        }

        @Override
        protected void onPostExecute(Boolean aBoolean) {
            super.onPostExecute(aBoolean);

            if (progressDialog.isShowing()) {
                progressDialog.cancel();
            }

            mediaPlayer.start();
            initialStage = true;
        }

        @Override
        protected void onPreExecute() {
            super.onPreExecute();

            progressDialog.setMessage("Buffering...");
            //progressDialog.show();
        }
    }



    @Override
    public void onBackPressed() {
        DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
        if (drawer.isDrawerOpen(GravityCompat.START)) {
            drawer.closeDrawer(GravityCompat.START);
        } else {
            super.onBackPressed();
        }
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();

        //noinspection SimplifiableIfStatement
        if (id == R.id.action_settings) {
            return true;
        }

        return super.onOptionsItemSelected(item);
    }


    private void displaySelectedScreen(int id)
    {
        Fragment fragment=null;
        Log.d("myTag", "This is my displ");

        switch (id){
            case R.id.nav_alarm:
                fragment = new Add_Alarm();
                break;

        }

        if (fragment !=null)
        {
            FragmentTransaction ft =getSupportFragmentManager().beginTransaction();
            ft.replace(R.id.content_main,fragment);
            ft.commit();

        }


    }

    @SuppressWarnings("StatementWithEmptyBody")
    @Override
    public boolean onNavigationItemSelected(MenuItem item) {
        // Handle navigation view item clicks here.
        int id = item.getItemId();

        Fragment fragment = null;




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

            Intent goToNextActivity = new Intent(getApplicationContext(), Main2Activity.class);
            startActivity(goToNextActivity);
        }
        FragmentTransaction ft =getSupportFragmentManager().beginTransaction();
        ft.replace(R.id.content_main,fragment);
        ft.addToBackStack(null);
        ft.commit();

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


}

3 个答案:

答案 0 :(得分:0)

尝试将 onNavigationItemSelected 中的代码更改为:

    switch (item.getItemId()){
                      case R.id.nav_alarm:
                            //do stuff
                            Intent goToNextActivity = new Intent(getApplicationContext(), Main2Activity.class);
                            startActivity(goToNextActivity);
                       break;
            }
            FragmentTransaction ft =getSupportFragmentManager().beginTransaction();
            ft.replace(R.id.content_main,fragment);
            ft.addToBackStack(null);
            ft.commit();

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

答案 1 :(得分:0)

您应该检查 onNavigationItemSelected(MenuItem item)方法,因为在替换您启动的片段时,您会像 Fragment fragment = null; .So一样片段null,以替换片段你需要采用实际的片段而不是null fragmnet。 您可以浏览一下fragments here.

`

答案 2 :(得分:0)

Change the flow of the code as below:

  @Override
    public boolean onNavigationItemSelected(@NonNull MenuItem item) {
        item.setCheckable(false);
        Fragment fragment=null;
        switch (item.getItemId()) {
                case R.id.navigation_home:
                fragment = new HomeFragment();
                 break
        }
        loadHomeFragment(fragment);
        mDrawerLayout.closeDrawer(GravityCompat.START);
        return true;
    }

       private void loadHomeFragment(Fragment fragment) {
                FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction();
        fragmentTransaction.setCustomAnimations(android.R.anim.fade_in,
                android.R.anim.fade_out);
        fragmentTransaction.replace(R.id.frame, fragment);
        fragmentTransaction.commitAllowingStateLoss();
    }