Как использовать параметр, определенный в другом классе?
Я использую навигационный ящик в своей основной деятельности, определенной как
private DrawerLayout drawerlayout;
Я использую его в основном упражнении, чтобы открывать и закрывать фрагмент навигации, но в классе фрагментов навигации есть 3 специальные кнопки, в которых я хотел бы использовать функциональность фрагмента навигации. drawerlayout.closedrawer(r.id.drawer)
Но каждый раз, когда я снова определяю его в классе фрагментов навигации и пытаюсь добавить его в щелчок для этих кнопок, после нажатия кнопок приложение вылетает с исключением с нулевым указателем. Как мне поступить примерно так же?
Спасибо! Вот пример кода из моего приложения: открытый класс navfragment extends фрагмент {
public interface OnCloseDrawerListener
{
void onCloseDrawer();
}
@Override
public void onClick(final View v) {
switch (v.getId()) {
case R.id.button_logout:
final DialogFragment dialog = new LogoutCancelSignoutDialogFragment(mLogoutListener);
dialog.show(getActivity().getSupportFragmentManager(), AbsBaseaActivity.TAG_LOGOUT_DIALOG);
BangoHelper.eventLogout();
((OnCloseDrawerListener)getActivity()).onCloseDrawer();
break;
}
}
В моем классе MainActivity:
public class MainActivity extends AbsBaseaActivity implements OnBackStackChangedListener {
private DrawerLayout drawerLayout;
protected void onCreate(final Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main_activity);
//----------Code for Navigation Drawer setup
// 2. App Icon
drawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
// 2.1 create ActionBarDrawerToggle
actionBarDrawerToggle = new ActionBarDrawerToggle(this, drawerLayout,
R.drawable.arrow_up, R.string.drawer_open, R.string.drawer_close){
/** Called when a drawer has settled in a completely closed state. */
public void onDrawerClosed(View view) {
// getActionBar().setTitle(NavigationPanelFragment.activeFragmentTitle);
// invalidateOptionsMenu(); // creates call to onPrepareOptionsMenu()
}
/** Called when a drawer has settled in a completely open state. */
public void onDrawerOpened(View drawerView) {
// getActionBar().setTitle(NavigationPanelFragment.activeFragmentTitle);
// invalidateOptionsMenu(); // creates call to onPrepareOptionsMenu()
}
};
// 2.2 Set actionBarDrawerToggle as the DrawerListener
drawerLayout.setDrawerListener(actionBarDrawerToggle);
}
public void onCloseDrawer()
{
drawerLayout.closeDrawer(R.id.drawer);
}
Even after modifying the code as per the given suggestion it crashes when I click on the button defined onclick for the fragment class, any clue?
1 ответ
Вы можете добавить обратный вызов из вашего фрагмента в вашу деятельность, чтобы закрыть ящик.
Ex.
public class YourFragment extends Fragment
{
public void onClick(View v)
{
((OnCloseDrawerListener)getActivity()).onCloseDrawer();
}
public interface OnCloseDrawerListener
{
void onCloseDrawer();
}
}
Тогда в вашей деятельности вам нужно будет реализовать этот интерфейс
public class MyActivity extends Activity implements OnCloseDrawerListener
{
@Override
public void onCloseDrawer()
{
// add whatever code you need to close the drawer
}
}
Очевидно, вы можете назвать этот интерфейс чем-то, что более точно соответствует вашим потребностям, и передать ему любые аргументы, которые вам нужны