我在Android中面临两个关于碎片的问题。
我有一个应用程序与一个导航抽屉片段在我的主要活动。当我在这个导航抽屉上单击一个项目时,一个新的片段会加载到主活动中的“fragment_placeholder”上。很简单。
创建MainActivity时,我将在fragment_placeholder中加载“homeFragment”。这个片段有一个带有两个标签的SlidingTabLayout,每个标签加载相应的片段。这个家庭片段是我的应用程序的“主要”部分。
public class MainActivity extends ActionBarActivity {
private Toolbar mToolbar;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
setupDrawer();
// Loading home fragment
if (findViewById(R.id.fragment_placeholder) != null) {
if (savedInstanceState != null) {
return;
}
FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction();
HomeFragment homeFragment = new HomeFragment();
homeFragment.setArguments(getIntent().getExtras());
fragmentTransaction.replace(R.id.fragment_placeholder, homeFragment);
fragmentTransaction.addToBackStack(null); // This is not working properly
fragmentTransaction.commit();
}
}
@Override
public void itemClicked(View view, int position) {
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
switch(position)
{
// Home
case 0:
HomeFragment homeFragment = new HomeFragment();
fragmentTransaction.replace(R.id.fragment_placeholder, homeFragment);
break;
// My account
case 1:
MyAccountFragment myAccountFragment = new MyAccountFragment();
fragmentTransaction.replace(R.id.fragment_placeholder, myAccountFragment);
break;
// Config
case 2:
ConfigFragment configFragment = new ConfigFragment();
fragmentTransaction.replace(R.id.fragment_placeholder, configFragment );
break;
}
fragmentTransaction.commit();
mDrawerLayout.closeDrawer(mDrawerListView);
}
我根据以下答案找到了一个解决方案https://stackoverflow.com/a/14588642/1959257
我将代码更改为:
public void onBackPressed() {
HomeFragment homeFragment = new HomeFragment();
displayFragment(homeFragment);
}
private void displayFragment(Fragment pFragment) {
// Fragment currently inside the placeholder view
Fragment fr = (Fragment) getSupportFragmentManager()
.findFragmentById(R.id.fragment_placeholder);
// If this fragment is a HomeFragment, close app
if (fr instanceof HomeFragment) {
finish();
}
else {
// Replace curretly Fragment by HomeFragment
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
ft.replace(R.id.fragment_placeholder, pFragment);
ft.commit();
}
}
我有一个带有三个Fragments的,让我们称它们为A、B和C。A在活动中调用。 并在按下某些按钮时被替换为片段B或C,并且FragmentTransaction调用。 但是,假设我连续三次调用片段B,我如何防止它自己堆积到它身上呢?同时我希望这是可能的:B呼叫
我正在创建片段转换器助手类,对此我有一些问题。 我称之为碎片转换器 它有一个fragmentContainer,它是一个视图组,包含我想展示的所有片段。 我已经做了自己的替换(片段片段更改,布尔需要保存到堆栈) 功能是: 从碎片容器中移除旧碎片 错误如下: 如果我使用我的替换功能并保存以使其正常工作,我可以使用设备的后退按钮后退并返回到先前添加的片段,它就像一个符咒。 但是,当我想替换一个片段而不
你好, 我有MainActivity,TitlesFragment和DelessFragment。 我的MainActivity将显示TitlesFragment,当用户单击标题时,TitlesFragment将被DetailsFragment替换。那很好。然而,当我将DetailsFragment添加到addToBackStack时。当我点击后退按钮时,它会关闭应用程序,而不是显示标题碎片。 我
这是负责将片段添加到后堆栈的函数: 当我点击后退按钮时,最后一个片段没有被加载(什么也没有发生)。 知道是什么导致的吗? 编辑:FragmentManager日志。 http://pastebin.com/mYnVdkLG 在我看来,我的应用程序似乎在两次保存第二个视图,而不是先保存第一个视图,然后再保存第二个视图。
问题内容: 我试图动态地向片段中的表添加行。但是,我遇到了一些运行时错误,非常需要一些建议。 Logcat: 1) 2) 3) 片段二 MainActivity.java fragment_two.xml 问题答案: 改变这个 至 这是避免的一个错误。 并用于初始化视图。要知道为什么要读 何时调用活动上下文或应用程序上下文?
我有一个,它创建一个,然后这个创建另一个: 这让我想到。是否真的可以删除并转到? 提前感谢您的时间,我在网上找不到任何合适的信息!