Zee*_*bir 6 android android-fragments
在我的应用程序中我的第一个Fragment是在BackStack中,并且在交易时没有将该片段添加到backstack.
编辑.
我在第一次横切后多次使用相同的碎片,但横切后跟第一个被添加到backstack
addToBackStack(TAG);但我从未添加第一个碎片到backstack但仍然我不明白为什么我必须点击两次将应用程序发送到后台.
这是代码
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();
Run Code Online (Sandbox Code Playgroud)
现在,当我按下后退按钮时,它会删除片段,但应用程序不会转到后台.当我第二次按下后退按钮时,它会进入后台.
它replace()本身是否将片段添加到backstack?如果是,那么我如何删除片段并让我的应用程序转到后台onBackPressed?如果它没有将片段添加到backstack那么为什么会发生这种情况?我该如何让它正常工作?
谢谢!
编辑:
这是完整的活动代码.
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);
}
}
Run Code Online (Sandbox Code Playgroud)
编辑
MCVE
这是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();
}
}
Run Code Online (Sandbox Code Playgroud)
这是碎片.
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;
}
Run Code Online (Sandbox Code Playgroud)
Nez*_*cer -1
在 onBackPressed 中,在 super.onBackPressed() 之前添加以下内容:
moveTaskToBack(true);
Run Code Online (Sandbox Code Playgroud)
编辑
要实现您所需的功能,请尝试以下操作:
@Override
public void onBackPressed() {
int count = getFragmentManager().getBackStackEntryCount();
//pop all fragments till it remains the first fragment then move to background
if (count == 1) {
super.onBackPressed();
//additional code
} else {
getFragmentManager().popBackStack();
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
981 次 |
| 最近记录: |