จะตั้งแท็ก Fragment ด้วยรหัสได้อย่างไร


137

ฉันไม่พบsetTag(String tagName)วิธีเช่นนี้ในFragmentชั้นเรียน วิธีเดียวในการตั้งค่าFragmentแท็กที่ฉันได้พบคือการทำFragmentTransactionและส่งชื่อแท็กเป็นพารามิเตอร์

นี่เป็นวิธีเดียวในการตั้งFragmentแท็กด้วยรหัสอย่างชัดเจนหรือไม่

คำตอบ:


118

ใช่. ดังนั้นวิธีเดียวคือในเวลาทำธุรกรรมเช่นใช้add, replaceหรือเป็นส่วนหนึ่งของรูปแบบ

ฉันพิจารณาสิ่งนี้ผ่านการตรวจสอบแหล่งที่มาของความเข้ากันได้ในขณะที่ฉันมองหาบางสิ่งที่คล้ายกันในอดีต


2
คำตอบของคุณอยู่ที่นี่ [ที่นี่] [1] ในโพสต์บน stackoverflow [1]: stackoverflow.com/questions/9363072/android-set-fragment-id
SME

2
ใช้ FragmentTransaction's add (int containerViewId, Fragment Fragment, String tag) ดังที่อธิบายไว้ที่นี่: stackoverflow.com/a/13244471/4002895 @PJL โปรดแก้ไขคำตอบของคุณคำตอบนี้ทำให้เข้าใจผิดคน
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
ฉันใช้รหัสนี้ที่ไหน ใน getItem ใน FragmentPagerAdapter?
Dr.jacky

35

คุณสามารถระบุแท็กภายในไฟล์ xml โครงร่างกิจกรรมของคุณ

จัดหาandroid:tag attributeสตริงที่ไม่ซ้ำ

เช่นเดียวกับที่คุณจะกำหนด ID ในเค้าโครง xml

    android:tag="unique_tag"

ลิงก์ไปยังคู่มือนักพัฒนาซอฟต์แวร์


33
หากใช้งานไฟล์เลย์เอาต์ แต่คำถามนี้หมายถึงการตั้งค่าแท็กแบบไดนามิกใน Java
IgorGanapolsky

1
นี่เป็นคำตอบที่ฉันต้องการเพราะบางครั้งในขณะที่ใช้ห้องสมุดบางแห่งคุณไม่สามารถควบคุมธุรกรรมส่วนได้ดังนั้นคุณจึงไม่สามารถตั้งค่าแท็กได้โดยทางโปรแกรม ขอบคุณ!
RJFares

3

คุณสามารถได้รับชิ้นส่วนทั้งหมดเช่นนี้:

สำหรับ v4 fragmets

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

คุณได้อะไรมา นั่นไม่ใช่วิธีที่คุณตั้งค่าแท็กสำหรับ Fragment ไม่ใช่โดยการใช้เวลานาน
Farid
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.