BaseActivity pour la Navigation
Je suis en train de construire une base de l'activité de navigation et veulent quelque chose de flexible, afin que l'Activité dicte à la Base de l'Activité de mise en page à gonfler.
J'ai le texte suivant
public abstract class BaseActivity extends AppCompatActivity implements NavigationView.OnNavigationItemSelectedListener {
private int mLayoutRes;
protected void setLayout(int layoutRes) {
mLayoutRes = layoutRes;
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(mLayoutRes);
//Layout implements toolbar
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
if (toolbar != null){
setSupportActionBar(toolbar);
}
DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
//The layout implements the nav
if (drawer != null){
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);
}
}
//Other Nav code ommitted as its too verbose
}
Puis la Mise en page est passé de l'activité épouse
public class Home extends BaseActivity {
private final String TAG = "Home";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.setLayout(R.layout.activity_home);
super.onCreate(savedInstanceState);
//Other Activity code
}
}
Est-il un meilleur moyen pour y parvenir?
Peut-être mettre une base de mise en page avec un cadre de contenu et de gonfler à cela?
Toutes les suggestions seraient appréciées.
- Sur le plan conceptuel, il serait préférable de définir getLayout() dans la classe de base, et de la remplacer dans les sous-classes. super.set() n'est pas quelque chose que vous voyez souvent.
InformationsquelleAutor Duncan Hoggan | 2015-10-08
Vous devez vous connecter pour publier un commentaire.
Vous pouvez suivre BaseActivity de Google IO application. Juste remplacer
setContentView
et vous n'avez pas besoin desetLayout
Voici mon BaseActivity
Vous pouvez vous référer à mon code ci-dessous, faites attention à
addContentView
dans ma base de l'activité (ici, j'ai le nom de ceNavigationDrawerActivity
)De la Base de l'activité:
Puis dans d'autres activités, par exemple, MainActivity:
Espérons que cette aide!
Je faire quelques changements dans BaseActivity classe à l'aide de gonflage de mise en page de baseactivity et de les réutiliser, vous pouvez utiliser la classe suivante pour s'étendre uniquement dans l'un quelconque de votre classe d'activité.
C'est mon base_activity.xml,
vous pouvez soit remplacer
setContentView
dans votreBaseActivity
et initialisées à tout ce qui est après le super appeler ou se déplacer tous lesDrawerLayout
choses liées à uneprotected
de la méthode et de l'appeler à partir de chacun des enfants deBaseActivity
, après l'appel desetContentView
. Je pense que la première devrait être très simple une, à partir de ce que vous avez posté, vous pouvez éviter de surcharger onCreate dans le BaseActivityVoici mon exemple de la mise en œuvre de BaseActivity, j'ai trouvé, je l'ai fait différemment et il a travaillé pour moi.
Mes Activités De Base
Toute activité de partage de la Navigation même Tiroir
Permettant une Nav dynamique de Tiroir dans vos activités de base vous permet d'économiser les problèmes de l'écriture de code et plus. En outre, vous pouvez remplacer les Activités de Base de la valeur liquidative du Tiroir et de faire des résultats différents pour des situations différentes.