我正在尝试从使用 a 过渡FrameLayout
到 usingFragmentContainerView
并且从我看过的教程来看,这应该很容易。但是,当我在进行更改后运行我的应用程序时,我得到
Error inflating class androidx.fragment.app.FragmentContainerView
Caused by: java.lang.ClassNotFoundException: androidx.fragment.app.FragmentContainerView
Run Code Online (Sandbox Code Playgroud)
我的布局文件非常简单:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_height="match_parent"
android:layout_width="match_parent"
xmlns:tools="http://schemas.android.com/tools"
tools:showIn="@layout/app_bar_main">
<androidx.fragment.app.FragmentContainerView
android:id="@+id/fragment_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</LinearLayout>
Run Code Online (Sandbox Code Playgroud)
我需要在我的 build.gradle 中添加一些东西吗?为什么找不到类?
我正在尝试从联系人选择器中检索联系人图片,联系人姓名和手机号码.一旦我选择了联系人选择器中的联系人,我希望能够检索这三件事.
我已成功地从联系人选择器中检索联系人ID,但我似乎无法使用该ID获得任何其他工作.
我查看了各种示例代码,它们都使用了Cursor,并使用光标做了不同的事情,但我不明白它是如何工作的.有人可以帮我吗?
这是我尝试过的一些代码:
public void launchContactPicker(View view) {
Intent contactPickerIntent = new Intent(Intent.ACTION_PICK,
ContactsContract.Contacts.CONTENT_URI);
startActivityForResult(contactPickerIntent, CONTACT_PICKER_RESULT);
}
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (resultCode == RESULT_OK) {
switch (requestCode) {
case CONTACT_PICKER_RESULT:
Cursor cursor;
Bundle extras = data.getExtras();
if(extras != null)
{
Set<String> keys = extras.keySet();
for (String key : keys) {
extras.get(key);
}
}
else
{
Log.v("Auto Respond", "No extras returned from contact.");
}
Uri result = data.getData();
String id = result.getLastPathSegment();
cursor = …
Run Code Online (Sandbox Code Playgroud) 我有一个使用时间表的应用程序。用户选择时间表的开始/结束时间,然后我将开始/结束时间显示给用户。问题是,由于DST更改,显示的时间已关闭。
我可以为我的时区(东部时间)解决问题,也可以为GMT解决问题,如果我为GMT设置了特定案例,则阿拉斯加时间仍然是错误的。有什么建议么?
这是我的代码:
显示的时间:
long startTimeMillis = (startHour * 1000 * 60 * 60) + (startMin * 1000 * 60) - getTimeOffset();
Run Code Online (Sandbox Code Playgroud)
getTimeOffset:
TimeZone tz = TimeZone.getDefault();
//deal with GMT weirdness
if (tz.getRawOffset() == 0)
return tz.getRawOffset() + tz.getDSTSavings();
else
return tz.getRawOffset();
Run Code Online (Sandbox Code Playgroud)
我认为我需要类似的东西:
else if(tz.inDaylightTime(new Date()))
return tz.getRawOffset() + tz.getDSTSavings();
Run Code Online (Sandbox Code Playgroud)
但是,如果我这样做了,那么东部时间比原先的时间要少1个小时,而阿拉斯加时间要少2个小时。如果我做相反的事情:(-而不是+)
else if(tz.inDaylightTime(new Date()))
return tz.getRawOffset() - tz.getDSTSavings();
Run Code Online (Sandbox Code Playgroud)
那时东部时间比应该多1小时,但是阿拉斯加时间是正确的。
附录:
我也在tz.getOffset(new Date().getTime())
每种情况下都尝试使用而不是tz.getRawOffset()
。这实际上是我尝试的第一件事,因为根据Google的文档,此功能应该为您处理DST。
结束附录
我也尝试过使用日历,如下所示:
Calendar calendar = GregorianCalendar.getInstance();
return calendar.get(Calendar.ZONE_OFFSET);
Run Code Online (Sandbox Code Playgroud)
这为EST时间提供了正确的时间,但格林尼治标准时间提前1小时,阿拉斯加则落后1小时。我已经试过了:
if(tz.inDaylightTime(new Date()))
return calendar.get(Calendar.ZONE_OFFSET) + …
Run Code Online (Sandbox Code Playgroud) 我知道这可能听起来很奇怪,但我想检索系统默认的联系人图片.你知道,当联系人没有图片时使用的图标.它在不同版本的Android之间有所不同,但它通常是一张空白的脸,或者是灰色的android,或者其他什么.
我可以从系统中获取该图像并在我的应用程序中使用它吗?
有没有办法让我的测试设备在我打开Android应用程序时不报告我的Google Analytics?我知道AdMob可以添加测试设备,这些设备会加载虚拟广告.Android上的Analytics有类似的东西吗?
我的部分用户遇到了崩溃问题,这是Google Play开发者控制台崩溃报告中显示的错误:
Unable to start activity ComponentInfo{com.havens1515.autorespond/com.havens1515.autorespond.SettingsMenuNew}: android.app.Fragment$InstantiationException: Unable to instantiate fragment com.havens1515.autorespond.NotificationOptions: make sure class name exists, is public, and has an empty constructor that is public
用户说当打开SettingsMenuNew
上面的错误中提到的任何设置菜单时会发生这种情况,但我没有在手机上遇到崩溃.SettingsMenuNew
是一个PreferenceActivity
和所有的子菜单PreferenceFragment
每个PreferenceFragment
都有一个空的构造函数,我不知道问题还有什么.我还在别人的问题中看到它需要这个newInstance
方法,但如果我没有在片段中添加任何其他参数,我认为我真的不需要它.
这里有一些显示这些方法的代码:
public class NotificationOptions extends PreferenceFragment
{
public NotificationOptions()
{
}
public static NotificationOptions newInstance(int title, String message)
{
NotificationOptions f = new NotificationOptions();
return f;
}
...
}
Run Code Online (Sandbox Code Playgroud) 我正在尝试在Android N中添加一个快速设置切换到我的应用程序.快速图块显示,但点击时它不会执行任何操作.触摸时我可以看到可见的反馈,所以我知道它正在识别点击,但点击时它没有做任何事情.
这是我的服务代码:
public class QuickSettingTileService extends TileService {
public QuickSettingTileService()
{
}
@Override
public IBinder onBind(Intent intent)
{
return null;
}
@Override
public int onStartCommand(Intent intent, int flags, int startID)
{
//some setup code is here
return START_STICKY;
}
@Override
public void onClick()
{
Context context = getApplicationContext();
Toast.makeText(context, "Quick Setting Clicked", Toast.LENGTH_SHORT).show();
//Toggle code is here
}
}
Run Code Online (Sandbox Code Playgroud)
我的清单几乎直接从文档中复制了代码.只做了一些修改:
<service
android:name=".QuickSettingTileService"
android:label="@string/app_name"
android:icon="@drawable/quick_toggle_off"
android:permission="android.permission.BIND_QUICK_SETTINGS_TILE">
<intent-filter>
<action android:name="android.service.quicksettings.action.QS_TILE" />
</intent-filter>
</service>
Run Code Online (Sandbox Code Playgroud)
该服务在打开应用程序时启动:
Intent serviceIntent = new Intent(this, QuickSettingTileService.class);
startService(serviceIntent);
Run Code Online (Sandbox Code Playgroud)