小编Ran*_*ndy的帖子

使用 androidx.fragment.app.FragmentContainerView 时出现 ClassNotFoundException

我正在尝试从使用 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 中添加一些东西吗?为什么找不到类?

android android-fragments

14
推荐指数
2
解决办法
7794
查看次数

android获取联系人图片,姓名和手机号码

我正在尝试从联系人选择器中检索联系人图片,联系人姓名和手机号码.一旦我选择了联系人选择器中的联系人,我希望能够检索这三件事.

我已成功地从联系人选择器中检索联系人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)

android android-contacts

5
推荐指数
1
解决办法
4640
查看次数

Android时区和DST问题

我有一个使用时间表的应用程序。用户选择时间表的开始/结束时间,然后我将开始/结束时间显示给用户。问题是,由于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 dst timezone-offset

5
推荐指数
1
解决办法
7906
查看次数

检索系统默认Android联系人图片

我知道这可能听起来很奇怪,但我想检索系统默认的联系人图片.你知道,当联系人没有图片时使用的图标.它在不同版本的Android之间有所不同,但它通常是一张空白的脸,或者是灰色的android,或者其他什么.

我可以从系统中获取该图像并在我的应用程序中使用它吗?

android default contacts android-contacts

4
推荐指数
1
解决办法
5792
查看次数

Android中的Google Analytics - 过滤掉测试设备

有没有办法让我的测试设备在我打开Android应用程序时不报告我的Google Analytics?我知道AdMob可以添加测试设备,这些设备会加载虚拟广告.Android上的Analytics有类似的东西吗?

android google-analytics google-analytics-api

4
推荐指数
1
解决办法
1842
查看次数

片段实例化崩溃

我的部分用户遇到了崩溃问题,这是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)

java android preferenceactivity android-fragments

3
推荐指数
1
解决办法
1099
查看次数

快速设置在Android N中切换

我正在尝试在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)

android android-7.0-nougat

3
推荐指数
1
解决办法
898
查看次数