Làm cách nào để đặt thẻ Fragment theo mã?


137

Tôi đã không tìm thấy một cái gì đó giống như setTag(String tagName)phương pháp trong Fragmentlớp. Cách duy nhất để đặt Fragmentthẻ mà tôi đã tìm thấy là thực hiện FragmentTransactionvà chuyển tên thẻ làm tham số.

Đây có phải là cách duy nhất để thiết lập một cách rõ ràng một Fragmentthẻ theo mã?

Câu trả lời:


118

Đúng. Vì vậy, cách duy nhất là vào thời điểm giao dịch, ví dụ như sử dụng add, replacehoặc như một phần của bố cục.

Tôi đã xác định điều này thông qua việc kiểm tra các nguồn tương thích khi tôi tìm kiếm một cách tương tự tại một số điểm trong quá khứ.


2
Câu trả lời của bạn nằm ở đây [tại đây] [1] trong bài đăng trên stackoverflow [1]: stackoverflow.com/questions/9363072/android-set-fragment-id
SME

2
Sử dụng add của FragmentTransaction (int containerViewId, Fragment Fragment, tag String) như được mô tả ở đây: stackoverflow.com/a/13244471/4002895 @PJL Vui lòng chỉnh sửa câu trả lời của bạn. Câu trả lời này gây hiểu lầm cho mọi người
dasar

Điều đó khá bất tiện.
Ian Wambai

75

Bạn có thể đặt thẻ thành đoạn theo cách này:

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

7
Tôi sử dụng mã này ở đâu? Trong getItem trong FragmentPagerAdOG?
Dr.jacky

35

Bạn có thể cung cấp một thẻ bên trong tệp xml bố trí hoạt động của bạn.

Cung cấp android:tag attributevới một chuỗi duy nhất.

Giống như bạn sẽ chỉ định một id trong bố cục xml.

    android:tag="unique_tag"

liên kết đến hướng dẫn của nhà phát triển


32
Điều đó sẽ làm việc nếu một người đang sử dụng một tập tin bố trí. Nhưng câu hỏi này đề cập đến việc thiết lập thẻ động trong Java.
IgorGanapolsky

1
đây là câu trả lời tôi cần vì đôi khi trong khi sử dụng một số thư viện, bạn không có quyền kiểm soát các giao dịch phân đoạn để bạn không thể đặt thẻ theo chương trình. Cảm ơn!
RJFares

3

Bạn cũng có thể nhận được tất cả các mảnh như thế này:

Đối với các mảnh vỡ v4

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

Đối với app.fragment

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

0

Đây là cách tốt nhất tôi đã tìm thấy:

   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

Tôi biết đã 6 năm rồi nhưng nếu có ai gặp phải vấn đề tương tự như tôi đã làm:

Tạo một Fragmentlớp tùy chỉnh với một trường thẻ:

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

Trước khi thêm đoạn vào sectionPagerAdaptertập hợp thẻ như thế:

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


-22

Bạn có thể thêm thẻ làm tài sản cho các Fragmentđối số. Nó sẽ được tự động khôi phục nếu đoạn bị phá hủy và sau đó được HĐH tạo lại .

Ví dụ : -

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

Tôi hiểu ý bạn. Cảm ơn!
devhermluna

Bạn đã nhận được gì?! Đó không phải là cách bạn đặt thẻ cho Fragment không bằng một cú sút xa
Farid
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.