我有一个托管两个片段的活动.活动开始时会在加载对象时显示加载程序.然后通过newInstance方法将加载的对象作为参数传递给两个片段,并附加这些片段.
final FragmentTransaction trans = getSupportFragmentManager().beginTransaction();
trans.replace(R.id.container1, Fragment1.newInstance(loadedObject));
trans.replace(R.id.container2, Fragment2.newInstance(loadedObject));
trans.commit();
Run Code Online (Sandbox Code Playgroud)
第二个片段包含android.support.v4.view.ViewPager和tabs.onResume我们初始化它如下
viewPager.setAdapter(adapter);
viewPager.setOffscreenPageLimit(adapter.getCount()); //the count is always < 4
tabLayout.setupWithViewPager(viewPager);
Run Code Online (Sandbox Code Playgroud)
问题是android随后抛出
java.lang.IllegalStateException:FragmentManager已经在执行事务
有了这个堆栈跟踪:( 为了简洁,我android.support
取出了包名称)
v4.app.FragmentManagerImpl.execSingleAction(FragmentManager.java:1620)at v4.app.BackStackRecord.commitNowAllowingStateLoss(BackStackRecord.java:637)at v4.app.FragmentPagerAdapter.finishUpdate(FragmentPagerAdapter.java:143)at v4.view.ViewPager .populate(ViewPager.java:1235)at v4.view.ViewPager.populate(ViewPager.java:1083)at v4.view.ViewPager.setOffscreenPageLimit(ViewPager.java:847)
数据显示是否setOffscreenPageLimit(...);
已删除.还有另一种方法可以避免这个问题吗?
在生命周期中片段事务是否完成,以便我可以等待设置我的寻呼机?
我已经下载了android源代码.我想对源代码进行一些修改,以嵌入一些目前不存在的功能.但问题在于我无法理解源代码是如何组织的,可以在哪里找到哪种文件.所以,如果有人能帮助我理解这将是非常有帮助的.
Android Studio 3.0的最新更新允许创建多种模块类型.其中一个新类型是"功能模块",但我找不到有关它的详细信息
现有的Android库模块和功能模块之间有什么区别?我为什么要使用后者?
我能看到的唯一区别是功能模块在清单中定义了一个应用程序.可以/应该将这些功能用作独立应用吗?在这种情况下,它们与实际的应用程序模块有什么不同?
我已经检查了Stack Overflow问题API,以便在Android应用程序中配置静态IP地址.
它适用于Android 2.3.但是,在更高的API级别上没有运气.例如,我把设置
android.provider.Settings.System.putString(getContentResolver(), android.provider.Settings.System.WIFI_USE_STATIC_IP, "1");
android.provider.Settings.System.putString(getContentResolver(), android.provider.Settings.System.WIFI_STATIC_IP, "192.168.0.100");
android.provider.Settings.System.putString(getContentResolver(), android.provider.Settings.System.WIFI_STATIC_NETMASK, "255.255.255.0");
android.provider.Settings.System.putString(getContentResolver(), android.provider.Settings.System.WIFI_STATIC_DNS1, "192.168.0.254");
android.provider.Settings.System.putString(getContentResolver(), android.provider.Settings.System.WIFI_STATIC_GATEWAY, "192.168.0.254");
Run Code Online (Sandbox Code Playgroud)
但我回去查看:
Setting --> Wi-Fi --> Long Press Access Point SSID --> Modify Network --> check Show advanced options
Run Code Online (Sandbox Code Playgroud)
该IP Settings
领域仍然陈述DHCP
但不是Static
.
确实,我可以android.provider.Settings.System.getString()
用来取回我设定的东西.它证明设置保存在某处,但系统只是忽略它.
系统使用android.provider.Settings.System
Android 3.x和4.x以外的设置,因为设置是根据接入点SSID设置的.我可以修改一个SSID上的设置,就像它在Android 2.3上的工作方式一样吗?
我需要保留一个输入type="text"
,但会在Android和iOS设备上打开数字键盘.
这是因为输入字段仍然具有诸如的字符,£
并且,
在一个type="number"
或多个字段内是不可能的type="tel"
.
我发现你可以强制使用iOS上的数字键盘pattern="\d*"
,但这对Android没有任何作用.
这是我到目前为止:
<input type="text" inputmode="numeric" pattern="\d*" value="£2,000,000" />
Run Code Online (Sandbox Code Playgroud)
我需要一种方法来在活动完全加载,布局,绘制并准备好用户的触摸控件的确切时刻运行一些代码.哪个方法/监听器可以做到这一点?
提前致谢!
我想要实现的是当我的扩展程序在网页上检测到特殊标记时打开弹出窗口.搜索一段时间后,似乎只有在用户单击扩展名时才能打开弹出窗口.这是真的吗?
或者我可以在浏览器上获取我的扩展程序图标的位置吗?也许我可以在扩展图标下绘制一个窗口并显示,使其看起来就像弹出窗口一样.
我EditText
在一项活动中使用了4个字段和2个微调器.这些组件的顺序是2 EditText
,然后是2个微调器,然后是2个EditText
字段.
当我将焦点(在软键盘下一个按钮的帮助下)EditText
转移到微调器时,旋转器没有获得焦点,焦点转移到EditText
放置在微调器后面的下一个场时,会出现问题.
我在微调器上使用了requestfocus(),但它没有用.
如何确保微调器获得焦点?
我的导航抽屉中列出了许多页面/片段,用户可能经常在这些页面/片段之间切换,我希望它们在后台中,以便他们可以导航回来,但我只想在后台堆栈中每个片段的一个实例用户不必按下疯狂的次数退出应用程序.我无法弄清楚如何在没有删除页面的情况下有效地"重新排序"后台堆栈.
目前,当我更改页面时,我正在使用此代码更改片段并确保它仅在后面的堆栈中一次
if (mFragMgr == null) {
mFragMgr = getSupportFragmentManager();
}
String backStateName = fragmentDescriptor.name();
boolean fragmentPopped = mFragMgr.popBackStackImmediate(backStateName, 0);
if (!fragmentPopped){
mFragMgr.beginTransaction()
.remove((Fragment) mFragment)
.replace(R.id.content_frame, (Fragment) mFragment)
.addToBackStack(backStateName)
.commit();
}
Run Code Online (Sandbox Code Playgroud)
我在onBackPressed中使用此代码
@Override
public void onBackPressed() {
if (mFragMgr.getBackStackEntryCount() > 0) {
mFragMgr.popBackStackImmediate();
} else {
super.onBackPressed();
}
}
Run Code Online (Sandbox Code Playgroud)
这有效,但这意味着它删除了我不想删除的页面.例:
当我的用户在订单中访问6页A > B > C > D > E > C
因为我正在进行删除时,我期望以下堆栈:
[E] [C]
[D] [D] [E]
[C] [C] [C] [D]
[B] [B] [B] [B] [B]
[A] -> [A] …
Run Code Online (Sandbox Code Playgroud) 在我的活动中,我使用以下代码作为我的两个工具栏.
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// Creating The Toolbar and setting it as the Toolbar for the activity
toolbar = (Toolbar) findViewById(R.id.tool_bar);
setSupportActionBar(toolbar);
getSupportActionBar().setTitle("My title");
toolbar2 = (Toolbar) findViewById(R.id.tool_bar_bottom);
setSupportActionBar(toolbar2);
...
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_main, menu);
return true;
}
Run Code Online (Sandbox Code Playgroud)
我希望它使用menu_main.xml作为顶部工具栏,使用menu_bottom作为底部工具栏,但是对于顶部和底部工具栏,它使用menu_main.xml.
有人可以解释一下如何正确地做到这一点吗?