我目前正在使用該模板(使用導航抽屜)this site。然而,就像大多數導航抽屜一樣,碎片用於保存抽屜物品。如何在Android中保留抽屜的同時將其他活動傳遞給其他活動?
我希望能夠從activity> nav drawer> fragment>轉到另一個活動,因爲我想在該活動中包含Google地圖。
爲方便起見,此活動將被稱爲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", "[email protected]", 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
上創建一個新的導航器抽屜,並使用相同的項目填充它,但那不起作用。