EDIT :
좀 더 문제가 발생하면 이전 문제의 원인을 발견했습니다. (TL : DR : 활동에서 Bundle
을 전달하려고합니다.) 단편 장착하다 이런 단편을 교체 할 때 :대체 된 조각이 손상되지 않았습니다.
AddEditActivityFragment fragment = new AddEditActivityFragment();
Bundle arguments = getIntent().getExtras();
fragment.setArguments(arguments);
getSupportFragmentManager().beginTransaction()
.replace(R.id.add_edit_fragment, fragment)
.commit();
I는 무시하고 기록을 추가 확인은 abunchofsources 따른되어야로 )는 (파괴되지 않는 대신 조각 , onStop
, onDestroyView
, onDestroy
등이 있습니다.
popBackStackImmediate
을 호출해도 아무런 효과가 없습니다. 어떻게해야합니까?
이전 질문 제목 : "동적 setImageDrawable로 설정 FloatingActionButton 아이콘이 적용되지 않습니다."
나는 사용자 입력을 데이터베이스에 저장하는 역할을하는 조각 (AddEditFragment) 안에 FAB
을 가지고 있습니다.
DB에서 편집 행을 구별하고 새 행을 만들려면 아이콘에 "보내기"아이콘 또는 "저장"아이콘 중 하나를 설정했습니다. 은 기본적으로 버튼 "보내기"로 설정되어
<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"/>
I의 단편에 포함하는 활동으로부터 데이터를 전달하는 역할 내 단편에 대한 인터페이스를 구현하는 "저장"하는 아이콘을 설정하는 데 사용 이 방법을 사용하여 :
@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
블록) - 두 추가/수정 모드에서 아이콘을 "저장"으로 설정하지만 "보내기"아이콘이 없습니다. 그것은 내
receiveData
인터페이스 방식으로 완벽하게 근무
setImageDrawable
전화를 보인다
, 은 (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