2017-08-01 130 views
0

我有導航抽屜菜單和6個活動。我想創建一個抽象活動類,並將所有抽屜菜單代碼移動到它,然後對其進行擴展。如何創建抽象活動類並將其擴展到所有活動?

這是我的主要activity.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();} 

} 

,這是我的第二個例子活動:

public class IntroActivity extends AppCompatActivity { 

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

如何創建一個抽象類的活動,並插入我的抽屜裏的代碼,而從我想任何活動稱呼呢?

回答

1

你必須像

public class MainActivity extends AppCompatActivity implements NavigationView.OnNavigationItemSelectedListener{ 

    public NavigationView navigationView; 
    public DrawerLayout drawer; 
    public RelativeLayout content; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     super.setContentView(R.layout.activity_main); 
     drawer=(DrawerLayout) findViewById(R.id.drawer_layout); 
     content = (RelativeLayout) findViewById(R.id.content); 

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




    } 


    @Override 
    public void setContentView(@LayoutRes int layoutResID) { 
     LayoutInflater inflater = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     View layout = inflater.inflate(layoutResID, null); 
     // var x = layout.LayoutParameters; 
     content.addView(layout); 
    } 


    public void OpenDrawer() 
    { 
     drawer.openDrawer(Gravity.START,true); 
    } 


    @Override 
    public boolean onNavigationItemSelected(@NonNull MenuItem item) { 
     switch (item.getItemId()){ 
      case R.id.navdrawer_item_first: 
       Toast.makeText(this, "first item clicked", Toast.LENGTH_SHORT).show(); 
       break; 
      case R.id.navdrawer_item_second: 
       Toast.makeText(this, "second item clicked", Toast.LENGTH_SHORT).show(); 
       break; 
     } 
     drawer.closeDrawers(); 
     return true; 
    } 
} 

創建mainActivity而activity_main

<?xml version="1.0" encoding="utf-8"?> 
<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:drawer="http://schemas.android.com/apk/res-auto" 
    android:id="@+id/drawer_layout" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 
    <RelativeLayout 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:id="@+id/content" /> 
    <android.support.design.widget.NavigationView 
     android:id="@+id/nav_view" 
     android:layout_width="wrap_content" 
     android:layout_height="match_parent" 
     android:layout_gravity="start" 
     android:fitsSystemWindows="true" 
     drawer:menu="@menu/navigation_drawer_items" 
     drawer:headerLayout="@layout/drawer_header" 
     android:background="#343a46" 
     drawer:itemTextColor="#ffffff" /> 
</android.support.v4.widget.DrawerLayout> 

,那麼你將延長郵件活動

public class SecondActivity extends MainActivity { 

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

    } 
} 

,並在清單做出第二個活動是啓動程序:

<activity android:name=".MainActivity"> 

     </activity> 
     <activity android:name=".SecondActivity"> 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 

       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter>s 
     </activity> 
+0

你會發現navigation_drawer_items和drawer_header在另一個答案,因爲我忘了他們 –

+0

請注意,您可以編輯答案,所以如果你的兩個項目應該走在一起,編輯一個包含另一個,然後刪除備用的一個。 – halfer

+0

謝謝。我從你的答案中解決了我的問題。非常感謝你 – Arshiiia13

0

我不建議爲此目的進行抽象活動。
相反,您應該只有一個活動,其中您的導航抽屜被附加。並將您的活動替換爲除了包含導航抽屜的MainActivity以外的片段。

activity_main佈局會是這樣的:

-DrawerLayout -FrameLayout -NavigationView

,並在主活動,只要在任何NavigationDrawer項目的用戶點擊只是所需更換的片段。

0

navigation_drawer_items

<?xml version="1.0" encoding="utf-8"?> 
<menu xmlns:android="http://schemas.android.com/apk/res/android"> 
    <group android:id="@+id/group_feature" 
     android:checkableBehavior="single"> 
     <item android:id="@+id/navdrawer_item_first" 


      android:title="first item"/> 
     <item android:id="@+id/navdrawer_item_second" 


      android:title="second item"/> 

    </group> 

</menu> 

drawer_header

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:background="#343a46" 

    android:orientation="vertical" 
    android:padding="10dp" 
    android:theme="@style/ThemeOverlay.AppCompat.Dark"> 

    <ImageView 
     android:id="@+id/imageView" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_gravity="center_horizontal" 
     /> 



    <TextView 
     android:id="@+id/textView" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_gravity="center_horizontal" 
     android:gravity="center_horizontal" 

     android:textColor="#dfba6b" 
     android:textStyle="bold" /> 

</LinearLayout>