我可以将自定义内容(例如导航抽屉)从一个活动扩展到另一个活动吗?

时间:2017-07-31 14:01:48

标签: java android

我有2个活动:SplashActivity和MainActivity。我在MainActivity中创建了一个抽屉菜单,并在其中包含了一个content.xml。

我想将抽屉菜单导入我将来制作的所有活动中。

我创建了一个像IntroActivity这样的新活动并对其进行扩展。实际上,我不想看到IntroActivity中MainActivity中包含的content.xml,只想看抽屉和IntroActivity。

这是我的mainActivity.java:

public class MainActivity extends AppCompatActivity {

    private Toolbar toolbar;
    protected DrawerLayout drawerLayout;
    NavigationView navigationView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        getWindow().getDecorView().setLayoutDirection(View.LAYOUT_DIRECTION_RTL);

        TextView tv = (TextView)findViewById(R.id.textView);
        Typeface textfont = Typeface.createFromAsset(getAssets(),"fonts/B Roya_YasDL.com.ttf");
        tv.setTypeface(textfont);

        toolbar = (Toolbar) findViewById(R.id.toolbar);
        drawerLayout = (DrawerLayout) findViewById(R.id.a1);

        setSupportActionBar(toolbar);
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);
        getSupportActionBar().setHomeAsUpIndicator(R.drawable.ic_more_vert_black_24dp);
        navigationView = (NavigationView) findViewById(R.id.a2);
        navigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() {
            @Override
            public boolean onNavigationItemSelected(@NonNull MenuItem item) {
                item.setChecked(true);
                drawerLayout.closeDrawer(Gravity.RIGHT);
                switch (item.getItemId()){
                    case R.id.intro:
                        Intent i = new Intent(MainActivity.this, IntroActivity.class);
                        startActivity(i);
                        break;
                }



                return false;
            }
        });

    }

    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

    public boolean onOptionsItemSelected(MenuItem item) {
        int id = item.getItemId();
        if (id == R.id.khat) {
            if (drawerLayout.isDrawerOpen(Gravity.RIGHT)) {
                drawerLayout.closeDrawer(Gravity.RIGHT);
            }

            else {
                drawerLayout.openDrawer(Gravity.RIGHT);
            }
            return super.onOptionsItemSelected(item);
        }
        else {
            Toast.makeText(getApplicationContext(),"Somthing",Toast.LENGTH_LONG).show();
        }

        return true;
    }

    public void onBackPressed(){
        if (drawerLayout.isDrawerOpen(Gravity.RIGHT)){
            drawerLayout.closeDrawer(Gravity.RIGHT);
        }else {super.onBackPressed();}

    }
}

这是我的IntroActivity:

public class IntroActivity extends MainActivity {

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

我可以做点什么来实现我的目标吗?

1 个答案:

答案 0 :(得分:1)

您的IntroActivity不应该延长MainActivity,因为IntroActivity 不是 MainActivity类型对象。

要将导航抽屉功能放入一个或多个活动中,您应创建一个抽象活动类NavigationDrawerActivity,并将导航抽屉的所有代码从MainActivity移到那里。  然后将IntroActivityMainActivity扩展为NavigationDrawerActivity

这样,您的所有活动都将具有导航抽屉功能,并且不会不必要地共享它们,例如content.xml布局。