अंत में, मुझे समाधान मिला है और यह काम करता है। मुझे बताओ कि मैं कुछ गलत कर रहा हूं। यह मूल रूप से 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 पर पाई जा सकती है।
स्रोत
2016-05-01 22:58:24