【发布时间】:2015-07-13 11:53:08
【问题描述】:
我目前正在使用this site 的模板(带有导航抽屉)。然而,与大多数导航抽屉一样,片段用于保存抽屉项目。
我希望能够从活动 > 导航抽屉 > 片段 > 转到另一个活动,因为我想在该活动中包含谷歌地图。
为方便起见,此活动将被称为add_route_activity.xml。我想从传递它的片段是my_routes_fragment.xml 我的问题是我希望add_route_activity.xml 也有导航抽屉。
我的主要活动称为activity_main.xml。有什么办法可以实现我想要的吗?我目前正在使用 Android Studio。
无论如何,我尝试使用 Material Design Template 片段创建另一个活动 (add_route_activity.xml),但我的应用程序崩溃了。以下是我的一些代码:
MainActivity.java
package com.my.app;
import android.app.Fragment;
import android.app.FragmentManager;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.support.v4.widget.DrawerLayout;
import android.support.v7.app.ActionBarActivity;
import android.support.v7.widget.Toolbar;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.Toast;
public class MainActivity extends ActionBarActivity
implements NavigationDrawerCallbacks {
/**
* Fragment managing the behaviors, interactions and presentation of the navigation drawer.
*/
private NavigationDrawerFragment mNavigationDrawerFragment;
private Toolbar mToolbar;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mToolbar = (Toolbar) findViewById(R.id.toolbar_actionbar);
setSupportActionBar(mToolbar);
mNavigationDrawerFragment = (NavigationDrawerFragment)
getFragmentManager().findFragmentById(R.id.fragment_drawer);
// Set up the drawer.
mNavigationDrawerFragment.setup(R.id.fragment_drawer, (DrawerLayout) findViewById(R.id.drawer), mToolbar);
// populate the navigation drawer
mNavigationDrawerFragment.setUserData("John Doe", "johndoe@doe.com", Bit
mapFactory.decodeResource(getResources(), R.drawable.avatar));
}
@Override
public void onNavigationDrawerItemSelected(int position) {
// update the main content by replacing fragments
Toast.makeText(this, "Menu item selected -> " + position, Toast.LENGTH_SHORT).show();
Fragment fragment = null;
switch (position) {
case 0:
fragment = new HomeFragment();
break;
case 1:
fragment = new ProfileFragment();
break;
case 2:
fragment = new ParkFragment();
break;
case 3:
fragment = new MyGalleryFragment();
break;
case 4:
fragment = new NavigationFragment();
break;
case 5:
fragment = new MyEventsFragment();
break;
case 6:
fragment = new MyActivitiesFragment();
break;
case 7:
fragment = new MyRoutesFragment();
break;
case 8:
fragment = new PlannerFragment();
break;
case 9:
fragment = new SignInFragment();
break;
case 10:
fragment = new SettingsFragment();
break;
default:
break;
}
if (fragment != null) {
FragmentManager fragmentManager = getFragmentManager();
fragmentManager.beginTransaction()
.replace(R.id.container, fragment).commit();
}
else {
// error in creating fragment
Log.e("MainActivity", "Error in creating fragment");
}
}
@Override
public void onBackPressed() {
if (mNavigationDrawerFragment.isDrawerOpen())
mNavigationDrawerFragment.closeDrawer();
else
super.onBackPressed();
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
if (!mNavigationDrawerFragment.isDrawerOpen()) {
// Only show items in the action bar relevant to this screen
// if the drawer is not showing. Otherwise, let the drawer
// decide what to show in the action bar.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
return super.onCreateOptionsMenu(menu);
}
@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();
//noinspection SimplifiableIfStatement
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
}
MyRoutesFragment.java
package com.my.app;
import android.app.Fragment;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
public class MyRoutesFragment extends Fragment {
public MyRoutesFragment() {}
Context context;
Button btnAddRoute;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_my_routes, container, false);
btnAddRoute = (Button) rootView.findViewById(R.id.btnAddRoute);
btnAddRoute.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//Intent intent = new Intent(context, AddRouteActivity.class);
//startActivity(intent);
}
});
return rootView;
}
}
具体来说,当我尝试使用模板(使用导航抽屉)运行AddRouteActivity 时,应用程序崩溃了。基本上我想做的是在AddRouteActivity 创建一个新的导航抽屉并用相同的项目填充它,但这不起作用。
【问题讨论】:
标签: java android xml android-fragments navigation-drawer