2016-04-19 10 views
10

मैं एक सामग्री डिजाइन ऐप पर काम कर रहा हूं। एक सुविधा जिसे मैं कार्यान्वित करना चाहता हूं वह किसी प्रकार का चुनाव है। जब कोई उपयोगकर्ता किसी सूची के तत्व पर क्लिक करता है, तो लगातार नीचे शीट संवाद, जो this जैसा दिखता है, दिखाना चाहिए। फिर, जब उपयोगकर्ता किसी भी बटन पर क्लिक करता है, तो यह संवाद दूर जाना चाहिए और मोडल नीचे शीट संवाद दिखाना चाहिए, जिससे उपयोगकर्ता को सूची आइटम के बारे में अधिक जानकारी मिलती है जिसे शुरुआत में क्लिक किया गया था। यह this जैसा दिखता है।BottomSheetDialog/BottomSheetDialogFragment - किस का उपयोग करना है और कैसे?

मुझे Appomompat संवादों के बारे में कुछ जानकारी पढ़ने के बाद भी BottomSheetDialog और BottomSheetDialogFragment, और उन्हें सही तरीके से उपयोग करने के बारे में कोई स्पष्ट स्पष्टीकरण नहीं मिल रहा है। तो, मेरे प्रश्न हैं:

  1. वे किस तरह से अलग हैं और मुझे प्रत्येक मामले के लिए किस का उपयोग करना चाहिए?
  2. संवाद में कौन सा बटन दबाया गया था, इस गतिविधि में डेटा कैसे प्राप्त करें?
  3. इनका उपयोग करने के बारे में कार्यान्वयन या ट्यूटोरियल के कोड के लिए कोई लिंक?

उत्तर

6

अंत में, मुझे समाधान मिला है और यह काम करता है। मुझे बताओ कि मैं कुछ गलत कर रहा हूं। यह मूल रूप से this guide से डायलॉगफ्रैगमेंट की तरह काम करता है, लेकिन मैंने इसे थोड़ा अलग किया है।

1) उनका अंतर डायलॉग फ्रैगमेंट और संवाद के समान है, और वे दोनों मोडल हैं। यदि आपको लगातार संवाद की आवश्यकता है, तो BottomSheetBehaviour instead का उपयोग करें (मुझे पता चला है कि दोनों संवाद मेरे ऐप में मोडल होना चाहिए)।

2) मुझे पहले कुछ कोड के साथ तीसरे प्रश्न का उत्तर देना होगा, और फिर दूसरे को जवाब देना आसान होगा।

3) नया public class बनाएं, जो extends BottomSheetDialogFragment है, मैंने इसे FragmentRandomEventPoll कहा। यहां दो दो चीजें हैं जिन्हें कार्यान्वित किया जाना है।

  • विधि onCreateView ओवरराइड करें। यह लगभग, गतिविधियों में विधि एक ही onCreate के रूप में है, सिवाय इसके कि के लिए यह दृश्य देता है यह बढ़ चाहिए:

    // We will need it later 
    private static String headerItem; 
    
    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 
    
    View v = inflater.inflate(R.layout.fragment_random_event_poll, container, false); 
        header = (TextView) v.findViewById(R.id.uRnd_fragment_bottom_sheet_poll_header); 
        skip = (Button) v.findViewById(R.id.uRnd_fragment_bottom_sheet_button_skip); 
        header.setText(...); 
    
        // I implemented View.OnClickListener interface in my class 
        skip.setOnClickListener(this); 
        return v; 
    } 
    
  • स्टेटिक विधि है जो आप करने के लिए आवश्यक डेटा पास और इस वर्ग के नया उदाहरण मिल (कर सकते हैं शायद मैं कर सकता अभी एक नियमित कन्स्ट्रक्टर का उपयोग किया है, मुझे इसके साथ थोड़ा और प्रयोग करना होगा)। URandomEventListItem डेटा मॉडल वर्ग है।

    public static FragmentRandomEventPoll newInstance(URandomEventListItem item) { 
        FragmentRandomEventPoll fragment = new FragmentRandomEventPoll(); 
        headerItem = item.getHeader(); 
        return fragment; 
    } 
    

2) गतिविधि या किसी अन्य जगह में इनपुट ईवेंट पाने के लिए, आवश्यक तरीकों के साथ एक इंटरफेस को परिभाषित करने और यह उदाहरण है के लिए सेटर विधि बनाने के लिए:

private PollButtonClickListener listener; 

public void setListener(PollButtonClickListener listener) { 
    this.listener = listener; 
} 

public interface PollButtonClickListener { 
    void onAnyButtonClick(Object data) 
} 

और जगह में आप चाहते हैं प्राप्त करने के लिए अपने डेटा ("dialog_event_poll" टैग लेआउट में निर्दिष्ट किया गया था):

FragmentRandomEventPoll poll = FragmentRandomEventPoll.newInstance(events.get(id)); 
poll.setListener(new FragmentRandomEventPoll.PollButtonClickListener() { 
     @Override 
     public void onAnyButtonClick(Object data) { 
      // Do what you want with your data 
     } 
    }); 
    poll.show(getSupportFragmentManager(), "dialog_event_poll"); 
} 

यदि वहाँ कुछ भी चाचा ar, मेरी परियोजना फाइल Github पर पाई जा सकती है।

संबंधित मुद्दे