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是因为initiateItem我mSavedState再次填满了我.而且我确信在通知我之后我adapter不会持有任何这些Fragments.
此外,如果你想这样做改变你的mSaveState,protected所以你将能够从扩展类(在我的情况下 …
问题
我需要从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进行修改.
敷设渠道
我有2个模块:
app (应用)box (图书馆模块)问题
我试图app从box模块中使用模块的一部分.问题是app模块依赖于box模块,因此我无法从box模块指向,因为这将创建循环依赖.
如何app从box模块中获取模块方法?
要么
如何通知app模块中的某个接收器有一些数据可以获得?
施工
我有Activity一个由它组成的"路径" Fragments.用户从去Fragment1到Fragment2,然后Fragment3填充所需的信息.没有什么花哨这里只是简单的backStack和.replace做的Fragments.
题
如果方向发生变化,我应该如何保留这些信息,以便backStack在方向改变之前恢复原状?
IDEAS
我唯一的想法是插入到saveInstanceState最后一个可见Fragment并从那里重新创建的东西,但它感觉非常hacky,我认为从长远来看,它会产生一些重大问题.
///////////// 更新 //////////////
看起来现在Android只要您遵循ARTICLE提供的指导原则就能独立完成
我隐藏了我的盒子有问题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和更低版本中是否有一种平滑的方法可以完全摆脱它?
从添加的行中检索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)