코드로 Fragment 태그를 설정하는 방법은 무엇입니까?


137

나는 수업 setTag(String tagName)에서 메소드 와 같은 것을 찾지 못했습니다 Fragment. Fragment내가 찾은 태그 를 설정하는 유일한 방법 FragmentTransaction은 매개 변수로 태그 이름을 수행 하고 전달하는 것입니다.

이것이 Fragment코드 로 태그 를 명시 적으로 설정하는 유일한 방법 입니까?

답변:


118

예. 유일한 방법은 트랜잭션 시간에있다 그래서, 예 사용 add, replace또는 레이아웃의 일부로 사용할 수 있습니다.

과거의 어느 시점에서 비슷한 것을 간단히 살펴 보았을 때 호환성 소스를 조사하여 이것을 결정했습니다.


2
당신의 대답은 거짓말 [여기] [1] [1] 유래에 게시물 : stackoverflow.com/questions/9363072/android-set-fragment-id
중소기업

2
사용하여 FragmentTransaction의 추가는 (INT는 containerViewId, 조각 조각, 문자열 태그) 여기에 설명 된대로 : stackoverflow.com/a/13244471/4002895 @PJL하시기 바랍니다 편집하여 answer.This 대답 사람들이 오해의 소지가
dasar

꽤 불편합니다.
Ian Wambai

75

이런 식으로 태그를 조각화하도록 설정할 수 있습니다.

Fragment fragmentA = new FragmentA();
getFragmentManager().beginTransaction()
    .replace(R.id.MainFrameLayout,fragmentA,"YOUR_TARGET_FRAGMENT_TAG")
    .addToBackStack("YOUR_SOURCE_FRAGMENT_TAG").commit(); 

7
이 코드는 어디에 사용합니까? FragmentPagerAdapter의 getItem에서?
Dr.jacky

35

활동 레이아웃 xml 파일 내에 태그를 제공 할 수 있습니다.

을 공급 android:tag attribute고유 한 문자열로.

레이아웃 xml에 id를 할당하는 것처럼.

    android:tag="unique_tag"

개발자 안내서 링크


33
레이아웃 파일을 사용하는 경우 작동합니다. 그러나이 질문은 Java에서 태그를 동적으로 설정하는 것과 관련이 있습니다.
IgorGanapolsky

1
이것은 때로는 일부 라이브러리를 사용하는 동안 조각 트랜잭션을 제어 할 수 없으므로 프로그래밍 방식으로 태그를 설정할 수 없기 때문에 필요한 대답이었습니다. 감사!
RJFares

3

다음과 같이 모든 조각을 얻을 수도 있습니다.

v4 조각의 경우

List<Fragment> allFragments = getSupportFragmentManager().getFragments();

app.fragment의 경우

List<Fragment> allFragments = getFragmentManager().getFragments();

0

이것이 내가 찾은 가장 좋은 방법입니다.

   public class MainActivity extends AppCompatActivity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        if (savedInstanceState == null) {
          // Let's first dynamically add a fragment into a frame container
          getSupportFragmentManager().beginTransaction(). 
              replace(R.id.flContainer, new DemoFragment(), "SOMETAG").
              commit();
          // Now later we can lookup the fragment by tag
          DemoFragment fragmentDemo = (DemoFragment) 
              getSupportFragmentManager().findFragmentByTag("SOMETAG");
        }
    }
}

-1

나는 그것이 6 년 전인 것을 알고 있지만 누군가 같은 문제에 직면하면 내가 한 것처럼하십시오.

Fragment태그 필드를 사용 하여 사용자 정의 클래스를 작성하십시오 .

public class MyFragment extends Fragment {
 private String _myTag;
 public void setMyTag(String value)
 {
   if("".equals(value))
     return;
   _myTag = value;
 }
 //other code goes here
}

조각을 sectionPagerAdapter세트에 추가하기 전에 다음과 같이 태그를 설정하십시오.

 MyFragment mfrag= new MyFragment();
 mfrag.setMyTag("TAG_GOES_HERE");
 sectionPagerAdapter.AddFragment(mfrag);

문제는 프래그먼트에 속성을 설정하는 것이 아닙니다. 주위에 참조를 유지하지 않고 기존 Fragment 인스턴스를 검색 할 수있었습니다 .
mkuech

-22

태그를 Fragment인수 의 속성으로 추가 할 수 있습니다 . 조각이 파괴 된 후 OS에 의해 재생성되면 자동으로 복원됩니다 .

:-

    final Bundle args = new Bundle();
    args.putString("TAG", "my tag");
    fragment.setArguments(args);

무슨 뜻인지 알았어 감사!
devhermluna

무엇을 얻었습니까?! 그렇게 긴 거리가 아닌 조각에 대한 태그를 설정하는 방법은 아닙니다
Farid
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.