कोड द्वारा फ़्रैगमेंट टैग कैसे सेट करें?


137

मुझे कक्षा setTag(String tagName)में विधि जैसा कुछ नहीं मिला Fragment। एक Fragmentटैग सेट करने का एकमात्र तरीका है जो मुझे मिला है FragmentTransactionऔर एक टैग नाम को पैरामीटर के रूप में पारित करके।

क्या यह Fragmentकोड द्वारा किसी टैग को स्पष्ट रूप से सेट करने का एकमात्र तरीका है ?

जवाबों:


118

हाँ। तो एक ही रास्ता लेन-देन के समय में है, जैसे का उपयोग कर add, replaceया लेआउट के भाग के रूप।

मैंने इसे अनुकूलता स्रोतों की एक परीक्षा के माध्यम से निर्धारित किया, जैसा कि मैंने संक्षेप में अतीत में कुछ बिंदु पर समान देखा था।


2
स्टैकओवरफ्लो पर पोस्ट में आपका उत्तर [यहां] [1] है: [१]: stackoverflow.com/questions/9363072/android-set-fragment-id
SME

2
FragmentTransaction के ऐड का उपयोग करें (int कंटेनर ViewId , Fragment fragment, String tag) जैसा कि यहाँ वर्णित है: stackoverflow.com/a/13244471/4002895 @PJL कृपया अपना उत्तर संपादित करें। यह उत्तर लोगों को गुमराह कर रहा है
dasar

यह बहुत असुविधाजनक है।
इयान वम्बाई

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?
डॉ। जकी

35

आप अपनी गतिविधि लेआउट xml फ़ाइल के अंदर एक टैग प्रदान कर सकते हैं।

android:tag attributeएक अद्वितीय स्ट्रिंग के साथ आपूर्ति करें ।

जैसे आप किसी लेआउट xml में आईडी असाइन करेंगे।

    android:tag="unique_tag"

डेवलपर गाइड के लिए लिंक


32
यदि कोई लेआउट फ़ाइल का उपयोग कर रहा है तो यह काम करेगा। लेकिन यह प्रश्न जावा में डायनामिक रूप से टैग सेट करने को संदर्भित करता है।
इगोरगानापोलस्की

1
यह वह उत्तर था जिसकी मुझे आवश्यकता थी क्योंकि कभी-कभी कुछ पुस्तकालयों का उपयोग करते समय, आपके पास खंड लेनदेन पर नियंत्रण नहीं होता है, इसलिए आप प्रोग्राम को टैग सेट नहीं कर सकते। धन्यवाद!
RJFares 10

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);


-22

आप Fragmentतर्कों के लिए एक संपत्ति के रूप में टैग जोड़ सकते हैं । यह स्वचालित रूप से बहाल हो जाएगा अगर टुकड़ा नष्ट हो जाता है और फिर ओएस द्वारा पुनः बनाया जाता है ।

उदाहरण : -

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

मुझे तुमसे मतलब है। धन्यवाद!
देवहर्मुला

तुम्हें क्या मिला?! यह नहीं है कि आपने फ्रैगमेंट के लिए एक टैग को लंबे शॉट से कैसे सेट नहीं किया
फरीद
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.