In meiner App Meine erste Fragment
ist in BackStack und das Fragment wurde nicht zum Backstack zum Zeitpunkt der Transaktionen hinzugefügt.Fragment ist im Backstack
Bearbeiten.
ich viele Male nach dem ersten Trennung gleiches Fragment verwende aber durch ersten gefolgt transection mit
addToBackStack(TAG);
zu Backstack hinzugefügt, aber ich hinzugefügt nie erstes Fragment zu Backstack, aber immer noch nicht verstehe ich, warum ich muß Klicken Sie zweimal, um die App an den Hintergrund zu senden.
Hier ist der Code davon
FragmentManager fm = getSupportFragmentManager();
Bundle args = new Bundle();
args.putString("url", Constants.URL_BASE);
feedFragment.setArguments(args);
fm.beginTransaction().replace(R.id.content_frame, feedFragment).commit();
Jetzt, als ich Taste wieder entfernt sie das Fragment aber App geht nicht in den Hintergrund. Es geht in den Hintergrund, wenn ich die Taste zum zweiten Mal drücke.
Ergibt replace()
selbst das Fragment zum Backstack? Wenn ja, wie kann ich das Fragment entfernen und meine App in den Hintergrund gehen onBackPressed
? Wenn das Fragment nicht zu Backstack hinzugefügt wird, warum passiert das? Wie soll ich es richtig machen?
Vielen Dank!
Bearbeiten:
Hier voller Aktivitätscode.
public class MainActivity extends AppCompatActivity {
private final String TAG = getClass().getName();
private DrawerLayout drawerLayout;
private FeedFragment feedFragment = new FeedFragment();
private ListView listView;
private LinearLayout searchLayout;
private RelativeLayout logolayout;
private Toolbar toolbar;
private Button settingBtn;
private Button bookmarkBtn;
private Button searchBtn;
private Tracker mTracker;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ApplicationController applicationController = (ApplicationController) getApplication();
mTracker = applicationController.getDefault();
initToolbar();
initUi();
loadCategorgies();
initFeed();
}
public void initUi() {
drawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
listView = (ListView) findViewById(R.id.lv_categories);
settingBtn = (Button) findViewById(R.id.btn_settings);
bookmarkBtn = (Button) findViewById(R.id.btn_bookmarks);
searchBtn = (Button) findViewById(R.id.btn_search);
settingBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
FragmentManager fragmentManager = getSupportFragmentManager();
fragmentManager.beginTransaction().replace(R.id.content_frame, new SettingFragment()).addToBackStack("setting").commit();
drawerLayout.closeDrawers();
}
});
bookmarkBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
FragmentManager fragmentManager = getSupportFragmentManager();
fragmentManager.beginTransaction().replace(R.id.content_frame, new BookmarkFragment()).addToBackStack("bookmark").commit();
drawerLayout.closeDrawers();
}
});
searchBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
FragmentManager fragmentManager = getSupportFragmentManager();
fragmentManager.beginTransaction().replace(R.id.content_frame, new SearchFragment()).addToBackStack("search").commit();
drawerLayout.closeDrawers();
}
});
}
public void initToolbar() {
toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
getSupportActionBar().setHomeAsUpIndicator(R.drawable.ic_action_menu_inactive);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
}
public void hideLogo() {
ImageView imageView = (ImageView) toolbar.findViewById(R.id.logo);
imageView.setVisibility(View.GONE);
}
public void showLogo() {
ImageView imageView = (ImageView) toolbar.findViewById(R.id.logo);
imageView.setVisibility(View.VISIBLE);
}
public void loadCategorgies() {
StringRequest stringRequest = new StringRequest(Constants.URL_GET_CATEGORIES, new Response.Listener<String>() {
@Override
public void onResponse(String response) {
if (Constants.isDev)
Log.d(TAG, response);
final CategoriesDTO categoriesDTO = Constants.gson.fromJson(response, CategoriesDTO.class);
CatgoriesAdapter catgoriesAdapter = new CatgoriesAdapter(categoriesDTO, MainActivity.this);
listView.setAdapter(catgoriesAdapter);
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
if (Constants.isDev)
Log.d(TAG, "clicked" + categoriesDTO.getCategories().get(position).getTitle());
FeedFragment feedFragment = new FeedFragment();
FragmentManager fm = getSupportFragmentManager();
Bundle args = new Bundle();
args.putString("url", Constants.URL_BASE_CATEGORY + categoriesDTO.getCategories().get(position).getSlug());
feedFragment.setArguments(args);
fm.beginTransaction().replace(R.id.content_frame, feedFragment).addToBackStack(categoriesDTO.getCategories().get(position).getSlug()).commit();
drawerLayout.closeDrawers();
}
});
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
}
});
ApplicationController.getmInstance().addToRequestQueue(stringRequest);
}
public void initFeed() {
FragmentManager fm = getSupportFragmentManager();
Bundle args = new Bundle();
args.putString("url", Constants.URL_BASE);
feedFragment.setArguments(args);
fm.beginTransaction().replace(R.id.content_frame, feedFragment).commit();
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
switch (id) {
case android.R.id.home:
drawerLayout.openDrawer(GravityCompat.START);
return true;
}
return super.onOptionsItemSelected(item);
}
@Override
protected void onResume() {
super.onResume();
if (Constants.isDev)
Log.i(TAG, "Setting screen name: " + TAG);
mTracker.setScreenName("Image~" + TAG);
mTracker.send(new HitBuilders.ScreenViewBuilder().build());
}
@Override
public void onBackPressed() {
super.onBackPressed();
//moveTaskToBack(true);
}
}
bearbeiten
MCVE
Dies ist HomeActivity.
public class HomeActivity extends AppCompatActivity {
private final String TAG = getClass().getName();
private DrawerLayout drawerLayout;
private FragmentManager fragmentManager;
private FeedFragment feedFragment = new FeedFragment();
private Toolbar toolbar;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.home_activity);
fragmentManager = getSupportFragmentManager();
initToolbar();
initFeed();
}
public void initToolbar() {
toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
getSupportActionBar().setHomeAsUpIndicator(R.drawable.ic_action_menu_inactive);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
}
public void initUi() {
drawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
}
public void initFeed() {
Bundle args = new Bundle();
args.putString("url", Constants.URL_BASE);
feedFragment.setArguments(args);
fragmentManager.beginTransaction().replace(R.id.content_frame, feedFragment).commit();
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
switch (id) {
case android.R.id.home:
drawerLayout.openDrawer(GravityCompat.START);
return true;
}
return super.onOptionsItemSelected(item);
}
@Override
protected void onResume() {
super.onResume();
if (Constants.isDev)
Log.i(TAG, "Setting screen name: " + TAG);
mTracker.setScreenName("Image~" + TAG);
mTracker.send(new HitBuilders.ScreenViewBuilder().build());
}
@Override
public void onBackPressed() {
super.onBackPressed();
}
}
Dies ist das Fragment.
public class FeedFragment extends Fragment {
private final String TAG = getClass().getName();
private View view;
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
view = inflater.inflate(R.layout.feed_fragment, container, false);
return view;
}
Bitte erklären Sie, was das tun wird? –
Können Sie uns mehr von Ihrem Code geben? Was tun Sie onBackPressed() -Methode und haben Sie andere Fragmente, die im Backstack sind, die die gleiche Containeransicht teilen? – Seishin
@ Seishin ja ich habe andere Fragmente für den gleichen Container. Aber in diesem Moment wurde nur dieses Fragment durchtrennt und es wurde nicht zum Backstack hinzugefügt, wie im obigen Code zu sehen ist. –