小编Dav*_*jak的帖子

如何在android中的导航抽屉里面添加一个可折叠的菜单项?

我有一个DrawerLayout封闭的a NavigationView,这个布局活动作为我的应用程序中所有活动的通用导航抽屉.我app:menu在导航视图中提供菜单资源.我有一些菜单项,但我希望一个菜单项可折叠/可扩展,这样当我点击它时,它会展开以显示两个子菜单并在第二次点击时再次折叠.

我已经通过添加另一个子菜单添加<menu>里面的<item>,但不能使之收缩/扩张.

另外,我不想ExpandableListView用于我的目的.相反,我只需要在菜单资源文件中做一些调整.请指出我正确的方向.我搜索Google只是为了查找可折叠列表项的代码,博客和示例ExpandableListView,但是我需要它来使用NavigationView设计支持库中的设计小部件.

这是我的菜单文件代码:

<menu xmlns:android="http://schemas.android.com/apk/res/android">

<group android:checkableBehavior="single">
    <item
        android:id="@+id/nav_aboutus"
        android:title="About Us" />

    <item
        android:id="@+id/nav_faq"
        android:title="FAQs" />
    <item
        android:id="@+id/nav_share"
        android:title="Share" />
    <item
        android:id="@+id/nav_myaccount"
        android:title="My Account" />
    <item
        android:id="@+id/nav_legal"
        android:title="Legal" >
        <menu>
                <item
                    android:id="@+id/nav_tnc"
                    android:title="Terms and Conditions" />
                <item
                    android:id="@+id/nav_pp"
                    android:title="Privacy Policy" />
            </group>
        </menu>
    </item>

</menu>
Run Code Online (Sandbox Code Playgroud)

我希望法律菜单项可以扩展,有两个子菜单项"条款和条件","隐私政策".

android navigation-drawer android-navigationview

9
推荐指数
2
解决办法
3万
查看次数

解码和重建后无法安装.apk(Apktool,Apkstudio)

我用apktool解码了一个apk文件,我没有改变任何东西.之后,我只是再次构建它,然后我尝试安装apk,但即使经过一些基本的更改,我也得到了以下错误.

我用windows做了什么cmd:

apktool d somename.apk -o testfolder
Run Code Online (Sandbox Code Playgroud)

然后

apktool b testfolder
Run Code Online (Sandbox Code Playgroud)

和:

adb install somename.apk
        pkg: /data/local/tmp/somename.apk
Failure [INSTALL_PARSE_FAILED_UNEXPECTED_EXCEPTION]
rm failed for -f, No such file or directory
Run Code Online (Sandbox Code Playgroud)

我用apkstudio做到了,结果是一样的.

$ adb install -r "somename.apk"
    pkg: /data/local/tmp/somename.apk
Failure [INSTALL_PARSE_FAILED_UNEXPECTED_EXCEPTION]
rm failed for -f, No such file or directory
Process exited with code 0
Run Code Online (Sandbox Code Playgroud)

它是一个系统应用程序?没有.

有人可以帮我吗?

android decode apk

8
推荐指数
2
解决办法
6172
查看次数

使用匕首2查看依赖注入

我有一个自定义视图扩展a TextView.我应该在哪里调用我的组件来注入视图?

component.inject(customTextView);
Run Code Online (Sandbox Code Playgroud)

java android dependency-injection view dagger-2

7
推荐指数
1
解决办法
5394
查看次数

Dagger 2中@Reusable范围的用途是什么?

我正在努力了解@ReusableDagger范围的使用.从文档中我可以理解的是,如果提供程序的作用域@Singleton或任何其他自定义作用域,则首先创建对象,然后在组件的整个生命周期中对其进行高速缓存.因此,对于并不总是需要相同实例或不经常使用的对象,这种方法最终会浪费内存.

但是如果我们选择一个非范围的提供者,每次它都会创建一个新实例,并且由于对象实例化很昂贵,特别是在Android等环境中,分配可能很昂贵,这可能会导致性能问题.

@Reusable范围位于无范围和范围实例之间.从文档中

有时您希望限制实例化@Inject构造的类或调用@Provides方法的次数,但您不需要保证在任何特定组件或子组件的生命周期中使用完全相同的实例

它是如何工作的?假设我有一个可重用的提供程序,AppComponent它不会总是给我相同的实例吗?

如果我在任何中注入相同的依赖项Subcomponent,我将获得相同的实例吗?什么时候将为GC释放缓存的对象?

我尝试了一个示例,@Reusable在我的AppComponent模块中创建一个对象并从我的子组件中注入相同的对象.
我能看到的是它的表现完全一样@Singleton.

我们可以从中获得哪些性能改进@Reusable

我们应该选择哪些可能的用例@Reusable

将所有无状态对象(无论我们是否获得相同的实例)都包括在内,例如Util类,Gson,Glide等,这是一个好主意@Reusable吗?

android dagger dagger-2

7
推荐指数
1
解决办法
1272
查看次数

云计算中的节点是什么?

在云计算中,人们是什么意思...

  • 节点?,和
  • 节点遍历?

是两台不同的计算机进行通信,还是两个不同的实体,或者一个服务器和一个客户端?

请解释。我尝试使用谷歌搜索这个主题,但我只能得到关于数据结构中节点的结果。

cloud

6
推荐指数
0
解决办法
6054
查看次数

Dagger 1到2迁移 - 成员注入方法可能只返回注入类型或void

我试图将我们当前的系统从匕首1迁移到2,我被困在这里半天.我不认为我很了解这一点.

这是我的模块:

public class BaseModule {

private final Context context;
private final SharedPreferences rawSharedPreferences;

public BaseModule(
        Context context,
        @Named("RawPreferences") SharedPreferences rawSharedPreferences
        ) {
    this.context = context;
    this.rawSharedPreferences = rawSharedPreferences;
}

@Provides
@Singleton
public Context provideContext() {
    return context;
}

@Provides
@Singleton
public DevicePlatform provideDevicePlatform(AndroidDevicePlatform devicePlatform) {
    return devicePlatform;
}

@Provides
@Named("RawPreferences")
@Singleton
public SharedPreferences provideRawSharedPreferences() {
    return rawSharedPreferences;
}

@Provides
@Named("RawPreferencesStore")
@Singleton
public SharedPreferencesStore provideRawSharedPreferencesStore(
        @Named("RawPreferences") SharedPreferences sharedPreferences) {
    return new AndroidSharedPreferencesStore(sharedPreferences);
}
Run Code Online (Sandbox Code Playgroud)

我的组件:

@Singleton
@Component(
    modules = {BaseModule.class}
) …
Run Code Online (Sandbox Code Playgroud)

dagger-2

6
推荐指数
1
解决办法
3506
查看次数

启动Intent for activity-alias

我为具有不同元数据的活动设置了一些别名.

在这个元数据中,我设置了片段的名称,然后我通过反射加载它.
我不知道这是否是一个"干净"的解决方案,虽然通过使用Fragments并将功能放入其中我只有一个SuperActivity和2个空SubActivities来指定清单中的每个.

现在的问题是:我可以通过Intent启动别名吗?new Intent(Context, Class)将无法正常工作,因为我找不到通过intent调用设置元数据的方法.

我需要启动一个Intent <activity android:name="XXX"/>,有一个简单的方法吗?

通用活动及其别名,我需要后者的新意图:

    <activity
        android:name="ActivityList"
        android:label="@string/app_name"
        android:launchMode="singleTop"
        android:screenOrientation="portrait" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>

        <meta-data
            android:name="android.app.default_searchable"
            android:value="ActivityListItem" />
        <meta-data
            android:name="fragment"
            android:value="FragmentLocationList" />
    </activity>

    <activity-alias
        android:name="ActivityListItem"
        android:label="@string/locations"
        android:parentActivityName="ActivityList"
        android:targetActivity="ActivityList" >
        <intent-filter>
            <action android:name="android.intent.action.SEARCH" />
        </intent-filter>

        <meta-data
            android:name="android.app.searchable"
            android:resource="@xml/searchable" />
        <meta-data
            android:name="android.app.default_searchable"
            android:value="ActivityListItem" />
        <meta-data
            android:name="fragment"
            android:value="FragmentItemList" />
    </activity-alias>
Run Code Online (Sandbox Code Playgroud)

java android android-intent

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

必须设置Dagger ApplicationComponent

我需要暴露我的OkHttpClient ,ApplicationModule所以我加入了ApplicationComponent.像这样的东西:

@Module
public class ApplicationModule {

    @Provides @Singleton
    public OkHttpClient provideOkHttpClient() {
    final OkHttpClient.Builder client = new OkHttpClient.Builder();

    return client.build();
}



@Singleton
@Component( modules = {ApplicationModule.class} )
public interface ApplicationComponent {

     OkHttpClient okHttpClient();

}
Run Code Online (Sandbox Code Playgroud)

所以我OkHttpClient okHttpClient();ApplicationComponent正如你刚才看到的那样添加了.

现在NetworkModule我用它像:

@Module
public class NetworkModule {

    @Provides @ActivityScope
    public ProjectService provideProjectService(OkHttpClient client) {
          return new ProjectService(client);
}


  @Component( dependencies = {ApplicationComponent.class}, modules =   {NetworkModule.class} )
 @ActivityScope
 public interface NetworkComponent {

      void inject(@NonNull …
Run Code Online (Sandbox Code Playgroud)

android dagger-2

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

改造成功和错误回调时使用不同的模型进行反序列化

我正在使用的 API 对于成功和失败给出了完全不同的响应。

成功:

{
   "token":"asdfasdfhkAADBSKJBJBJKBJBK^%&BJBLLKHKJBXZ",
   "email":"sample@sample.com",
   "role":"admin"
}
Run Code Online (Sandbox Code Playgroud)

失败:

{
   "name": "NotAuthenticated",
   "message": "Invalid login.",
   "code": 401,
   "className": "not-authenticated"
}
Run Code Online (Sandbox Code Playgroud)

我对改造非常陌生,正在使用下面的代码进行调用。

LoginRequest request = new LoginRequest(mobileNumber, password);
    ApiInterface apiService = ApiClient.getClient().create(ApiInterface.class);

    Call<LoginResponse> call = apiService.authenticateUser(request);
    call.enqueue(new Callback<LoginResponse>() {
        @Override
        public void onResponse(Call<LoginResponse> call, Response<LoginResponse> response) {


        }

        @Override
        public void onFailure(Call<LoginResponse> call, Throwable t) {

        }
    });
Run Code Online (Sandbox Code Playgroud)

ResponseObject正如您所看到的,改造迫使我对success和都使用示例failure。因此我无法将失败响应转换为 pojo。

我研究过自定义反序列化。但是为每个请求编写自定义反序列化器可能很快就会失控。

请帮忙。

java android retrofit retrofit2

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

使用 HMS 设备上的地理编码器对纬度/经度坐标进行反向地理编码

我正在尝试使用android.location.GeocoderHMS(华为移动服务)设备上的 对纬度/经度坐标进行地理编码,但结果我一直得到一个空列表。

val result = geoCoder.getFromLocation(latitude, longitude, MAX_RESULTS) // [] on HMS
Run Code Online (Sandbox Code Playgroud)

为了验证这实际上应该起作用,我检查了Geocoder.isPresent()哪个返回true.

查看 LogCat 输出,我可以看到以下几行,这表明我缺少某些 API 密钥或未正确配置某些内容...

XX/? I/HwGeoCoderProvider: [I/HwLocation/HwGeoCoderProvider 1877:388 HwGeoCoderProvider.java:136] onGetFromLocation: start to GetFromLocation 
XX/? D/HwGeoCoderProvider: [D/HwLocation/HwGeoCoderProvider 1877:388 HwGeoCoderProvider.java:434] exceed max requesting limit
XX/? D/HwGeoCoderProvider: [D/HwLocation/HwGeoCoderProvider 1877:388 HwGeoCoderProvider.java:162] exceed max requesting limit
XX/? I/HwGeoCoderProvider: [I/HwLocation/HwGeoCoderProvider 1877:388 HwGeoCoderProvider.java:455] {callTime=..., service=hwLocation, rom_type=1001, transId={{some uuid}}, package=com.android.phone, apiName=GeoCode_getFromLocation, costTime=1, result=10400}
Run Code Online (Sandbox Code Playgroud)

我在 P40 Pro 上尝试了这个,它安装了最新的 HMS Core 版本 (5.0.0.304)。我之前收到过一些结果,所以它确实有效,但它显然达到了这个限制并停止工作。

如何android.location.Geocoder在 …

android reverse-geocoding huawei-mobile-services huawei-location-kit

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