小编Jak*_*ubW的帖子

从FragmentStatePagerAdapter中删除片段

UPDATE

经过一番与这个问题的重大斗争和SO用户的帮助后,我设法解决了这个问题.这就是我clearProgressUpTo现在的样子.

    public void clearProgressUpTo(int progress) {
    boolean deleted = false;

    for (int i = fragments.size() - 1; i > 0; i--) {
        int key = fragments.keyAt(i);
        if (key != progress) {
            fragments.delete(key);
            deleted = true;
        } else {
            break;
        }
    }

    if (deleted)
        notifyDataSetChanged(); //prevents recursive call (and IllegalStateException: Recursive entry to executePendingTransactions)

    while (mSavedState.size() > progress) {
        mSavedState.remove(mSavedState.size()-1);
    }

}
Run Code Online (Sandbox Code Playgroud)

我之所以这样做notifyDataSetChanged是因为initiateItemmSavedState再次填满了我.而且我确信在通知我之后我adapter不会持有任何这些Fragments.

此外,如果你想这样做改变你的mSaveState,protected所以你将能够从扩展类(在我的情况下 …

android android-fragments

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

Dagger + Retrofit动态网址

问题

我需要从USER输入的域调用API,我需要Retrofit在调用之前根据插入的数据编辑我的单例.

有没有办法"重置"我的单身人士,迫使它重新创建?

要么

有没有办法baseUrl在调用之前用我的数据(可能在Interceptor?)更新我的?

单身

@Provides
@Singleton
Retrofit provideRetrofit(SharedPreferences prefs) {

    String apiUrl = "https://%1s%2s";
    apiUrl = String.format(apiUrl, prefs.getString(ACCOUNT_SUBDOMAIN, null), prefs.getString(ACCOUNT_DOMAIN, null));

    OkHttpClient httpClient = new OkHttpClient.Builder()
            .addInterceptor(new HeaderInterceptor())
            .build();

    return new Retrofit.Builder()
            .baseUrl(apiUrl)
            .addConverterFactory(GsonConverterFactory.create())
            .client(httpClient)
            .addCallAdapterFactory(RxJavaCallAdapterFactory.create())
            .build();
}

@Provides
@Singleton
API provideAPI(Retrofit retrofit) {
    return retrofit.create(API.class);
}
Run Code Online (Sandbox Code Playgroud)

API

@FormUrlEncoded
@POST("endpoint")
Observable<Response> logIn(@Field("login") String login, @Field("password") String password);
Run Code Online (Sandbox Code Playgroud)

它现在如何运作

好的想法是SharedPrefs在API调用之前保存用户域数据并baseUrl使用格式化的String进行修改.

android dagger retrofit dagger-2 retrofit2

7
推荐指数
2
解决办法
4901
查看次数

如何在lib模块和主模块之间进行通信

敷设渠道

我有2个模块:

  • app (应用)
  • box (图书馆模块)

问题

我试图appbox模块中使用模块的一部分.问题是app模块依赖于box模块,因此我无法从box模块指向,因为这将创建循环依赖.

如何appbox模块中获取模块方法?

要么

如何通知app模块中的某个接收器有一些数据可以获得?

android

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

在方向改变时保留碎片背堆

施工

我有Activity一个由它组成的"路径" Fragments.用户从去Fragment1Fragment2,然后Fragment3填充所需的信息.没有什么花哨这里只是简单的backStack.replace做的Fragments.

如果方向发生变化,我应该如何保留这些信息,以便backStack在方向改变之前恢复原状?

IDEAS

我唯一的想法是插入到saveInstanceState最后一个可见Fragment并从那里重新创建的东西,但它感觉非常hacky,我认为从长远来看,它会产生一些重大问题.

///////////// 更新 //////////////

看起来现在Android只要您遵循ARTICLE提供的指导原则就能独立完成

android android-fragments

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

在API 16及更低版本中完全删除复选框的正确方法

我隐藏了我的盒子有问题CheckBox.我现在CheckBox看起来像这样:

<CheckBox
    android:id="@+id/favoritesBox"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:gravity="center"
    android:button="@null"
    android:tag="1"
    android:textStyle="italic"
    android:text="@string/details_tags_favs" />
Run Code Online (Sandbox Code Playgroud)

这里唯一的问题是,它button=@null正在消除它的风格,并没有完全消失.因此,我text没有居中,而是向右移动(按箱子大小).

在API 16和更低版本中是否有一种平滑的方法可以完全摆脱它?

android android-layout android-checkbox

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

如何从insert()获取ID

从添加的行中检索ID时遇到了一些问题. insertWithConflict在我的内部ContentProvider返回新添加的行的ID,但我不知道从ContentProvider我的IntentService负责触发插入的方法.

插入 IntentService

Uri uri = Uri.parse(MicroDatabaseProvider.CONTENT_URI + "/" +  MicroDatabaseProvider.ORGANIZER_SEARCH_IN);
getContentResolver().insert(uri, cv);
Run Code Online (Sandbox Code Playgroud)

插入 ContetnProvider

long idLong = sqlDB.insertWithOnConflict(DbHelperMicro.ORGANIZER_SEARCH_TABLE,
                    null,
                    values,
                    SQLiteDatabase.CONFLICT_IGNORE);
            getContext().getContentResolver().notifyChange(Uri.parse(CONTENT_URI + "/" + ORGANIZER_SEARCH_QUE), null);
Run Code Online (Sandbox Code Playgroud)

sqlite android

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