두 개의 단편이있는 간단한 앱이 있는데 가로 모드 인 경우 두 단편이 나란히 표시되고 세로로 조각 A가 표시되고 옵션을 선택하면 해당 활동이 시작됩니다. 내 문제는 세로 모드에 있고 조각 B를 표시 할 때입니다. 사용자가 메뉴 옵션을 선택하면 조각 B와 관련된보기를 새로 고치거나 다시 그려보고이 작업을 수행하는 방법을 이해할 수 없습니다. getView 메소드와 getLayoutInflater 메소드를 시도했지만 새로운 뷰를 작성하고 있다고 생각하기 때문에 화면이 변경되지 않습니다. 나는 또한 프래그먼트 A에 대한 참조를 얻으려고 시도했다. 프래그먼트를 빌드하고 프래그먼트 B를 바꾸는 루틴을 호출 할 수 있지만 그것이 표시되지 않기 때문에 참조를 얻을 수 없다고 생각했다. 필자가 정말로해야 할 일은 onCreateView 메소드가 새로운 뷰를 부 풀리기 위해 다시 호출되도록 강제하는 것입니다.하지만이 메소드는 몇 가지 메소드를 시도했지만 onCreateView를 다시 호출 할 수 없습니다. 어떻게 이런 생각을 했니?Android force 재건축 단편보기
14
A
답변
1
사용자가 내가 새로 고치거나 조각 B와 연결되어이 작업
onOptionsItemSelected()
에서
을 만드는 방법을 이해할 수없는보기를 다시 그려야 할 메뉴 옵션을 선택하는 경우는, 활동 호출이 새로운 컨텐츠로 위젯을 갱신하도록하는 프래그먼트의 메소드. 또는 액티비티에서 FragmentTransaction
을 실행하여 조각을 바꿉니다 (원래 조각이 FragmentTransaction
을 통해 설정된 경우).
onOptionsItemSelected()
전화를
9
당신은 replace()
방법
이 할 너무 열심히하지 않아야을 FragmentTransaction
을 수행하고 사용하고자하지만, 대답은 당신의 메뉴의 위치에 따라 달라집니다입니다 parent 액티비티 또는 A/B 중 하나에 있습니까?).
간단하게 말해서 메뉴 구현 및 onOptionsItemSelected()
이 부모 작업에 있다고 가정하고 menu_option1이 선택된 경우 조각을 변형하려고합니다. 메뉴는 (더 재사용 가능한 코드를 위해해야한다) 당신의 조각 중 하나의 자식 인 경우
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle item selection
//...
switch (item.getItemId()) {
case R.id.menu_option1:
//do something
FragmentManager fragmentManager = getFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
Fragment newFragment = new YourFragmentClass();
FragmentTransaction transaction = getFragmentManager().beginTransaction();
transaction.replace(R.id.your_fragment_id, newFragment);
transaction.addToBackStack(null);
transaction.commit();
return true;
case R.id.menu_option2:
//do something else;
return true;
default:
return super.onOptionsItemSelected(item);
}
}
또는 다음 하나의 방법은 호스트 활동을 필요로하는 것입니다 : 그것은 다음과 같이 보일 것입니다 Fragment에 정의 된 인터페이스를 구현하기 위해 콜백으로 사용할 수 있습니다. 그리고 프래그먼트 클래스 내의 onOptionsItemSelected()
콜백에서이 콜백 메소드를 호출하기 만하면됩니다.
한 마디처럼 들리지만 실제로는 두 가지 작업 만 수행하면됩니다. 당신이 R.id.your_fragment_id를 교체 할 때
public class MainActivity extends Activity implements FragmentA.onSelectedListener{
...
public void onSelected(){
FragmentManager fragmentManager = getFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
Fragment newFragment = new YourFragmentClass();
FragmentTransaction transaction = getFragmentManager().beginTransaction();
transaction.replace(R.id.your_fragment_id, newFragment);
transaction.addToBackStack(null);
transaction.commit();
}
}
것은, 당신이 XML에 선언 된 것을 가정합니다 :이, 당신은 같은 것을 볼 것이다 활동에서 그런 다음 조각 클래스
것을 척 . 하지만 원래 조각이 프로그래밍 방식으로 작성된 경우 어떻게해야합니까? –
@IgorGanapolsky이 조각의 컨테이너 ID입니다. – dmSherazi