我有一个使用蓝牙的应用程序。我的UI显示将由许多单独的显示组成,每个显示都实现为片段。其中一些相对复杂,我希望能够根据方向重新排列显示。
我必须禁用活动关闭,就好像我没有断开蓝牙连接一样。
我尝试了许多建议的步骤来尝试和管理从横向到纵向的方向转换,反之亦然。使用Bundle将数据从旧的传输到新的蓝牙。
如果我使用setRetainInstance(true);在我的片段中,我可以在不删除蓝牙连接的情况下成功更改显示,但该过程涉及充气和创建新版本的布局。来自先前实例的信息未传递到修改的布局,并且新布局是不活动的(例如,按下按钮在屏幕上正确指示但不改变父活动中的任何内容)。我似乎正在创建一个未连接到Activity的新实例。
我还尝试测试方向并使用getRequestedOrientation()/ setRequestedOrientation()以编程方式更改方向。这会使Fragment的相同实例与数据保持一致,但不会改变方向 - 我是否需要在此之后发出重绘命令?
我们将非常感激地收到任何建议。
答案 0 :(得分:0)
问题解决了 - 相对容易。
在Manifest中,使用android:configChanges =“orientation | screenSize”作为主Activity配置的一部分。
无需使用setRetainInstance(true);在片段onCreateView中 - 它似乎没有任何区别。
在Activity onCreate中添加片段然后隐藏:
// Set up the window layout
setContentView(R.layout.index_page_layout);
// Add the fragments and hide them.
FragmentManager fm = getFragmentManager();
FragmentTransaction fragTrans = fm.beginTransaction();
fragTrans.add(R.id.container, hmi1,"HMI1");
fragTrans.hide(hmi1);
fragTrans.add(R.id.container, hmi2,"HMI2");
fragTrans.hide(hmi2);
fragTrans.add(R.id.container, termfrag,"TERM");
fragTrans.hide(termfrag);
fragTrans.commit();
hmi1_showing = false;
hmi2_showing = false;
terminal_showing = false;
在Activity onConfigurationChanged中没有采取任何特殊措施。
在Fragment onConfigurationChanged中,我有:
Fragment currentFragment = getFragmentManager().findFragmentByTag("FRAGTAG");
FragmentTransaction fragTransaction = getFragmentManager().beginTransaction();
fragTransaction.detach(currentFragment);
fragTransaction.attach(currentFragment);
fragTransaction.commit();
其中FRAGTAG是Activity.onCreate方法中定义的相关标记。