2012-04-20 10 views
7

मैं एंड्रॉइड विकास पर नया हूं, और मैं वर्तमान में विभिन्न गतिविधियों के बीच स्विच करने के लिए टैबहोस्ट और टैबएक्टिविटी का उपयोग कर एक एप्लिकेशन बना रहा था। यह एप्लिकेशन ठीक काम कर रहा था, लेकिन मुझे हाल ही में पता चला है कि टैबएक्टिविटी को बहिष्कृत किया गया है और मुझे इसके बजाय खंड का उपयोग करना चाहिए।प्रोग्रामिंग के अंदर छविबटन के साथ एक लेआउट को प्रोग्रामेटिक रूप से

तो, मैं ऐसा करने के लिए कैसे समझा इस महान ट्यूटोरियल का पालन करें: http://thepseudocoder.wordpress.com/2011/10/04/android-tabs-the-fragment-way/

इसमें से अधिकांश ठीक काम करता है, लेकिन वहाँ मेरी समस्या है मेरे पुराने गतिविधियों जो अब टुकड़े के इस प्रकार का उपयोग कर ImageButton बढ़ा-चढ़ाकर किए गए हैं में से कुछ विधि:

private void displayLevelButtons() { 
    LayoutInflater lf = getLayoutInflater();    
     btns = lf.inflate(R.layout.mallmapactivity_level_buttons, null, false); 

     mBtnLevelDown = (ImageButton) btns.findViewById(R.id.btn_level_down); 
     mBtnLevelUp = (ImageButton) btns.findViewById(R.id.btn_level_up); 

     mBtnLevelDown.setOnClickListener(new OnClickListener() { 
      @Override 
      public void onClick(View view) {     
       levelDown(); 
       updateLevelButtons(); 
      } 
     }); 
     mBtnLevelUp.setOnClickListener(new OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       levelUp(); 
       updateLevelButtons(); 
      } 
     }); 

     LayoutParams params = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); 
     params.gravity = Gravity.BOTTOM | Gravity.CENTER_HORIZONTAL | Gravity.RIGHT;    
     addContentView(btns,params); 

    } 

आदेश एक टुकड़ा अंदर इस विधि को संकलित करने में सक्षम होने के लिए, मैं बदल दिया है:

LayoutInflater lf = getLayoutInflater(); 

को

LayoutInflater lf = getActivity().getLayoutInflater(); 

और

addContentView(btns,params); 

getActivity().addContentView(btns,params); 

लिए लेकिन मेरे विधि displayLevelButtons का उपयोग कर() की तरह इस मेरे बटन बनाने मेरी सामान्य दृश्य का सही तल में प्रकट होता है, नहीं में मेरे टुकड़े का दायां नीचे

public class MyFragment extends Fragment { 

    private View btns;   
    private ImageButton mBtnLevelUp; 
    private ImageButton mBtnLevelDown; 
    private ViewGroup myViewGroup; 

@Override 
    public View onCreateView (LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
     if (container == null) { 
      return null; 
     } 
     myViewGroup = container; 
     v = inflater.inflate(R.layout.mallmaptile, container, false);   
     return v; 
    } 

@Override 
    public void onViewCreated(View view, Bundle savedInstanceState) { 
     //Do some stuff and then : 
      displayLevelButtons();   

    } 

private void displayLevelButtons() { 
     LayoutInflater lf = getActivity().getLayoutInflater();   
     btns = lf.inflate(R.layout.mallmapactivity_level_buttons, myViewGroup, false); 

     mBtnLevelDown = (ImageButton) btns.findViewById(R.id.btn_level_down); 
     mBtnLevelUp = (ImageButton) btns.findViewById(R.id.btn_level_up); 

     mBtnLevelDown.setOnClickListener(new OnClickListener() { 
      @Override 
      public void onClick(View view) {      
       levelDown(); 
       updateLevelButtons(); 
      } 
     }); 
     mBtnLevelUp.setOnClickListener(new OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       levelUp(); 
       updateLevelButtons(); 
      } 
     }); 

     LayoutParams params = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); 
     params.gravity = Gravity.BOTTOM | Gravity.CENTER_HORIZONTAL | Gravity.RIGHT;    
     getActivity().addContentView(btns,params); 

    } 

ऐसा करने से मेरे बटन अभी भी अपने सामान्य दृश्य के निचले भाग में प्रदर्शित कर रहे हैं में नहीं:

मैं भी एक जड़ निर्दिष्ट करने के लिए जब छवि बटन के साथ मेरी लेआउट बढ़ा-चढ़ाकर, मेरे सारे टुकड़ा वर्ग इस तरह लग रही करने की कोशिश की मेरी टुकड़ा के नीचे, और अगर मैं सही पर attachToRoot बूलियन मान को बदलने की कोशिश: java.lang.IllegalStateException:

btns = lf.inflate(R.layout.mallmapactivity_level_buttons, myViewGroup, true); 

मैं त्रुटि मिलती है निर्दिष्ट बच्चे पहले से ही एक पैरेंट है। आपको पहले बच्चे के माता-पिता पर removeView() को कॉल करना होगा।

मुझे यकीन है, मुझे कुछ महत्वपूर्ण याद आया लेकिन मैं नहीं करता। किसी भी सुझाव की वास्तव में सराहना की जाएगी।

अग्रिम धन्यवाद,

उत्तर

12

आप लेआउट बढ़ा-चढ़ाकर तो आप निम्न कोड का उपयोग कर सकते में समस्या का सामना कर रहे हैं:

View headerView = View.inflate(this, R.layout.layout_name, null); 

यह आप पूरा माता पिता लेआउट दे देंगे तो आप उस लेआउट का उपयोग कर सकते हैं लाने के लिए जो कुछ भी देखें कि आप चाहते हैं या आप लेआउट पैरामीटर प्राप्त कर सकते हैं और फिर किसी भी दृश्य में लेआउट पैरा सेट कर सकते हैं (आपके केस बटन में मुझे लगता है)।

+0

मेरी विधि में मैं करने की कोशिश की बिना problem with inflater

आप यह कर सकते), आर। प्लेआउट।mallmapactivity_level_buttons, शून्य); मैं "इस" का उपयोग नहीं कर सकता क्योंकि मेरी कक्षा एक टुकड़ा फैली हुई है, इसलिए मैं इसके बजाय "getActivity()" का उपयोग करता हूं लेकिन मुझे यकीन नहीं है कि यह मेरा खंड संदर्भ प्राप्त करने के लिए अच्छी विधि है। वैसे भी मेरे सामान्य दृश्य के अनुसार मेरे विचार को फुलाएं मेरे टुकड़े – Digoun

+0

के अनुसार नहीं, वास्तव में, btns = View.inflate (v.getContext(), R.layout.mallmapactivity_level_buttons, myViewGroup) का उपयोग करना; यह काम कर रहा है। धन्यवाद – Digoun

+0

मैंने सूची दृश्य में इसका उपयोग करके कई समस्याएं हल की हैं। आपका स्वागत है .. –

0

मैं एक ही समस्या थी और इस लिंक में अपने जवाब खोजने: btns = View.inflate (getActivity (: किसी भी निर्भरता

LayoutInflater inflater = LayoutInflater.from(getContext()); 
inflater.inflate(R.layout.view_with_merge_tag, this);