2017-02-21 13 views
1

У меня есть класс с именем MainActivity.java, этот Java содержит код навигационной панели.Как использовать навигационный штрих-код?

Если я хочу создать другое действие с именем Contact.java, а также содержит код навигационной панели. Как повторно использовать код навигационной панели от MainActivity.java до Contact.java? Могу ли я создать класс для его решения?

Вот мой код:

package com.thisistap.isuper.www.contactbook; 
 

 
import android.content.Intent; 
 
import android.os.Bundle; 
 
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.MenuItem; 
 
import android.widget.Button; 
 
import android.widget.TabHost; 
 
import com.thisistap.isuper.www.contactbook.nav.*; 
 

 
public class MainActivity extends AppCompatActivity 
 
     implements NavigationView.OnNavigationItemSelectedListener { 
 
    private Button contact_button; 
 
    private TabHost mTabHost = null; 
 

 
    @Override 
 
    protected void onCreate(Bundle savedInstanceState) { 
 
     super.onCreate(savedInstanceState); 
 
     setContentView(R.layout.activity_main); 
 
     // defined elements from layout (it can be modified) 
 
     contact_button = (Button) findViewById(R.id.contact_button); 
 

 
     // --- [Start] defined elements from Navigation Bar (it cannot be modified from here) --- 
 
     Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
 
     setSupportActionBar(toolbar); 
 
     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); 
 
     // --- [End] defined elements from Navigation Bar (it cannot be modified from here) --- 
 

 
     // --- [Start] Button Group --- 
 
     contact_button.setOnClickListener(new Button.OnClickListener() { 
 
      @Override 
 
      public void onClick(View v) { 
 
       Intent myIntent = new Intent(MainActivity.this,Contact.class); 
 
       MainActivity.this.startActivity(myIntent); 
 
      } 
 
     }); 
 
     // --- [End] Button Group --- 
 
    } 
 

 
    // --- [Start] Navigation Bar Action (it cannot be modified from here) --- 
 
    @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 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(); 
 
     return super.onOptionsItemSelected(item); 
 
    } 
 
    @SuppressWarnings("StatementWithEmptyBody") 
 
    @Override 
 
    public boolean onNavigationItemSelected(MenuItem item) { 
 
     // Handle navigation view item clicks here. 
 
     int id = item.getItemId(); 
 
     if (id == R.id.nav_camera) { 
 
      Intent myIntent = new Intent(MainActivity.this,Contact.class); 
 
      MainActivity.this.startActivity(myIntent); 
 
     } else if (id == R.id.nav_gallery) { 
 

 
     } else if (id == R.id.nav_slideshow) { 
 

 
     } else if (id == R.id.nav_manage) { 
 

 
     } else if (id == R.id.nav_share) { 
 

 
     } else if (id == R.id.nav_send) { 
 

 
     } 
 
     DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); 
 
     drawer.closeDrawer(GravityCompat.START); 
 
     return true; 
 
    } 
 
    // --- [End] Navigation Bar Action (it cannot be modified from here) --- 
 
}

ответ

0

Я предлагаю вам extendig своей деятельности от базовой деятельности и реализовать общую логику в этом родитель.

0

Просто сделайте это: возьмите весь код ящика в BaseActivity и в XML BaseActivity поместите DrawerLayout как родительский вместе с контейнером (например, вы делаете это для фрагментов) и NavigationView. Вы также можете посмотреть ответ this. Он затрагивает ту же проблему.

Затем распространите BaseActivity на MainActivity и вместо использования setContentView() раздуйте его в контейнере вашей BaseActivity.

public class BaseActivity extends AppCompatActivity 
    implements NavigationView.OnNavigationItemSelectedListener { 

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


    // --- [Start] defined elements from Navigation Bar (it cannot be modified from here) --- 
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
    setSupportActionBar(toolbar); 
    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); 
    // --- [End] defined elements from Navigation Bar (it cannot be modified from here) --- 

} 

// --- [Start] Navigation Bar Action (it cannot be modified from here) --- 
@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 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(); 
    return super.onOptionsItemSelected(item); 
} 
@SuppressWarnings("StatementWithEmptyBody") 
@Override 
public boolean onNavigationItemSelected(MenuItem item) { 
    // Handle navigation view item clicks here. 
    int id = item.getItemId(); 
    if (id == R.id.nav_camera) { 
     Intent myIntent = new Intent(MainActivity.this,Contact.class); 
     MainActivity.this.startActivity(myIntent); 
    } else if (id == R.id.nav_gallery) { 

    } else if (id == R.id.nav_slideshow) { 

    } else if (id == R.id.nav_manage) { 

    } else if (id == R.id.nav_share) { 

    } else if (id == R.id.nav_send) { 

    } 
    DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); 
    drawer.closeDrawer(GravityCompat.START); 
    return true; 
} 
// --- [End] Navigation Bar Action (it cannot be modified from here) --- 
} 

Затем проходят в вашем MainActivity -

public class MainActivity extends BaseActivity{ 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    FrameLayout containerParent = (FrameLayout) findViewById(R.id.container); 
    getLayoutInflater().inflate(R.layout.activity_main, containerParent); 

contact_button = (Button) findViewById(R.id.contact_button); 
} 
    } 

Ваш BaseActivity XML должен быть, как это -

<DrawerLayout ---> 
    <FrameLayout ---/> 
    <NavigationView-------/> 
</DrawerLayout/>