編輯:
經過一番更多的修改之後,我發現了我之前的問題的原因(請參閱下面的TL; DR:我試圖通過Bundle
從活動到其片段替換片段)是替換片段這樣當:替換的片段不會被破壞
AddEditActivityFragment fragment = new AddEditActivityFragment();
Bundle arguments = getIntent().getExtras();
fragment.setArguments(arguments);
getSupportFragmentManager().beginTransaction()
.replace(R.id.add_edit_fragment, fragment)
.commit();
替換片段不被摧毀(因爲它應當根據abunchofsources),我通過重寫和添加記錄到驗證,onStop
,onDestroyView
,onDestroy
等,他們都沒有被調用。
調用popBackStackImmediate
也不做任何事情。 我能做什麼?
前面的問題標題: 「設置動態與setImageDrawable FloatingActionButton圖標沒有任何影響。」
我在一個片段(名爲AddEditFragment)中有一個FAB
,用於保存用戶對數據庫的輸入。
爲了區分從數據庫編輯行並創建新行,我將其圖標設置爲「發送」圖標或「保存」圖標。 默認情況下,該按鈕設置爲「發送」:
<android.support.design.widget.FloatingActionButton
android:id="@+id/add_edit_fab"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="@dimen/fab_margin"
app:layout_anchor="@id/add_edit_toolbar"
app:layout_anchorGravity="bottom|right|end"
app:srcCompat="@drawable/ic_send_white_24dp"/>
我用於設置圖標「保存」在我的片段,其用於從含有活性的數據傳遞到該片段實現一個接口,使用這種方法:
@Override
public void receiveData(Serializable data) {
Log.d(TAG, "receiveData: called");
mFoodItem = (FoodItem) data;
if (mFoodItem != null) {
mEditMode = true;
fab.setImageDrawable(ContextCompat.getDrawable(getContext(), R.drawable.ic_save_white_24dp));
utilDisplayFoodItem();
}
}
呼叫的setImageDrawable
工作的罰款,並從改變圖標「發送」到「保存」正常。
這是我遇到麻煩時。
我想刪除我的AddEditActivity類我AddEditFragment類的依賴,通過經Bundle
移除該接口實現和路過的片段所需的數據:
@Override
protected void onCreate(Bundle savedInstanceState) {
Log.d(TAG, "onCreate: starts");
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_add_edit);
AddEditActivityFragment fragment = new AddEditActivityFragment();
Bundle arguments = getIntent().getExtras();
boolean editMode = arguments != null;
fragment.setArguments(arguments);
getSupportFragmentManager().beginTransaction()
.replace(R.id.add_edit_fragment, fragment)
.commit();
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setHomeAsUpIndicator(R.drawable.ic_close_white_24dp);
getSupportActionBar().setTitle((editMode) ? "Edit Item:" : "Create Item:");
getSupportActionBar().setElevation(0);
Log.d(TAG, "onCreate: ends");
}
在這種情況下,我刪除receiveData
從該片段的方法,以及放置在此行:
fab.setImageDrawable(ContextCompat.getDrawable(getContext(), R.drawable.ic_save_white_24dp));
在我的片段類的各種可能的地方
(其onCreateView
方法內最有可能存在)。
它似乎沒有任何效果。我的情況是:
- 只是增加說
setImageDrawable
呼叫 - 集圖標「拯救」兩添加/編輯模式,但後來我有沒有「發送」圖標。 - 動態設置任意一種情況(
setImageDrawable
呼叫在if
區塊內) - 在添加/編輯模式下圖標都設置爲「發送」。 - 從XML中刪除默認「發送」圖標,然後動態設置任意一種情況 - 圖標在添加/編輯模式下都設置爲「發送」。
- 從XML中刪除默認圖標,然後設置爲僅動態「保存」(沒有
if
塊) - 在添加/編輯模式下將圖標設置爲「保存」,但是沒有「發送」圖標。
看來setImageDrawable
通話,這在我receiveData
接口方法的工作完美,沒有(內if
塊至少當圖標已設置,或當)任何影響。
我很茫然,很感激任何幫助!
在回答@ColdFire:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
Log.d(TAG, "onCreateView: starts");
View view = inflater.inflate(R.layout.fragment_add_edit, container, false);
ButterKnife.bind(this, view);
Bundle arguments = getArguments();
if (arguments != null) {
mFoodItem = (FoodItem) arguments.getSerializable(FoodItem.class.getSimpleName());
if (mFoodItem != null) {
mEditMode = true;
// Tried calling setImageDrawable here
}
}
// Tried calling setImageDrawable here
if (!mEditMode) {
// If adding an item, initialize it for right now's date and time
Calendar now = Calendar.getInstance();
mFoodItem.setDate(now.get(Calendar.YEAR), now.get(Calendar.MONTH), now.get(Calendar.DAY_OF_MONTH));
mFoodItem.setTime(now.getTimeInMillis()/Constants.MILLISECONDS);
}
utilDisplayFoodItem();
utilSetOnClickListeners();
setHasOptionsMenu(true);
// Tried calling setImageDrawable here
Log.d(TAG, "onCreateView: ends");
return view;
}
我應該提到其他一切都依賴於包數據正常工作。
發佈你在其中處理分段數據的代碼 –
現在包含在問題 – NivG