दृश्य रूट के रूप में अशक्त गुजरने से बचें (फुले हुए लेआउट के मूल तत्व पर लेआउट मापदंडों को हल करने की आवश्यकता है)


230

रूट स्टूडियो के लिए अशक्त होना मुझे यह चेतावनी देता है:

दृश्य रूट के रूप में अशक्त गुजरने से बचें (फुले हुए लेआउट के मूल तत्व पर लेआउट मापदंडों को हल करने की आवश्यकता है)

यह एक शून्य मान दिखा रहा है getGroupView। कृपया मदद कीजिए।

public class ExpandableListAdapter extends BaseExpandableListAdapter {

    private Context _context;
    private List<String> _listDataHeader; // header titles
    // child data in format of header title, child title
    private HashMap<String, List<String>> _listDataChild;

    public ExpandableListAdapter(Context context, List<String> listDataHeader,
                                 HashMap<String, List<String>> listChildData) {
        super();
        this._context = context;
        this._listDataHeader = listDataHeader;
        this._listDataChild = listChildData;
    }

    @Override
    public Object getChild(int groupPosition, int childPosititon) {
        return this._listDataChild.get(this._listDataHeader.get(groupPosition))
                .get(childPosititon);
    }

    @Override
    public long getChildId(int groupPosition, int childPosition) {
        return childPosition;
    }

    @Override
    public View getChildView(int groupPosition, final int childPosition,
                             boolean isLastChild, View convertView, ViewGroup parent) {

        final String childText = (String) getChild(groupPosition, childPosition);

        if (convertView == null) {
            LayoutInflater infalInflater = (LayoutInflater) this._context
                    .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            convertView = infalInflater.inflate(R.layout.list_item, null);


        }

        TextView txtListChild = (TextView) convertView
                .findViewById(R.id.lblListItem);

        txtListChild.setText(childText);
        return convertView;
    }

    @Override
    public int getChildrenCount(int groupPosition) {
        return this._listDataChild.get(this._listDataHeader.get(groupPosition))
                .size();
    }

    @Override
    public Object getGroup(int groupPosition) {
        return this._listDataHeader.get(groupPosition);
    }

    @Override
    public int getGroupCount() {
        return this._listDataHeader.size();
    }

    @Override
    public long getGroupId(int groupPosition) {
        return groupPosition;
    }

    @Override
    public View getGroupView(int groupPosition, boolean isExpanded,
                             View convertView, ViewGroup parent) {
        String headerTitle = (String) getGroup(groupPosition);
        if (convertView == null) {
            LayoutInflater infalInflater = (LayoutInflater) this._context
                    .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            convertView = infalInflater.inflate(R.layout.list_group, null);
        }

        TextView lblListHeader = (TextView) convertView
                .findViewById(R.id.lblListHeader);
        lblListHeader.setTypeface(null, Typeface.BOLD);
        lblListHeader.setText(headerTitle);

        return convertView;
    }

    @Override
    public boolean hasStableIds() {
        return false;
    }

    @Override
    public boolean isChildSelectable(int groupPosition, int childPosition) {
        return true;
    }

}

जवाबों:


364

करने के बजाय

convertView = infalInflater.inflate(R.layout.list_item, null);

करना

convertView = infalInflater.inflate(R.layout.list_item, parent, false);

यह दिए गए माता-पिता के साथ इसे फुलाएगा, लेकिन इसे माता-पिता से जोड़ नहीं सकता।


26
@ सक्रिय करें लेकिन गतिविधि के भीतर से फुलाते समय मुझे क्या उपयोग करना चाहिए? माता-पिता के बजाय मुझे क्या उपयोग करना चाहिए?
अलेक्जेंडर कुजनेत्सोव

3
@AlexanderKuznetsov निर्भर करता है कि आप क्या करने की कोशिश कर रहे हैं, मुझे लगता है। यदि आप गतिविधि के लिए सामग्री सेट करने का प्रयास कर रहे हैं, तो आपको उपयोग करना चाहिए setContentView(layoutId)। यदि आप किसी मौजूदा ViewGroup में एक नया दृश्य जोड़ने का प्रयास कर रहे हैं, तो आपको संभवतः केवल अभिभावक को पास करना चाहिए और फ़्लोटर को नया दृश्य संलग्न करने देना चाहिए।
Coeffect

@LucasTan मुझे लगता है कि मैं TabContentFactory में TabHost का संदर्भ रखूंगा और उसको अभिभावक के रूप में उपयोग करूंगा जब फुलाते हुए, लेकिन मुझे यकीन नहीं है कि यह सबसे अच्छा समाधान है। यह अजीब है कि createTabContent विधि माता-पिता / संदर्भ की आपूर्ति नहीं करती है।
Coeffect

4
एक ही समस्या (कोई माता-पिता) के onCreateInputView()लिए लागू होने पर सामने आती है InputMethodService
टेड होप

2
एल्डरडियल के लिए कस्टम दृश्य के बारे में, माता-पिता को क्या करना चाहिए?
1825 में user25

52

मुझे एक अच्छा लेख मिला LayoutInflater। लेखक बताते हैं कि कैसे के सभी संस्करणों inflateविधि काम करते हैं और देता है के उदाहरण ListViewऔरAlertDialog

http://www.doubleencore.com/2013/05/layout-inflation-as-intended/

अपडेट # 1।

इस जवाब ने हाल ही में मेरी भी मदद की। https://stackoverflow.com/a/5027921/1065835


38

यहाँ फिर से जाना, किसी कारण के लिए View.inflate का उपयोग करने के बजाय एक लेआउटिनफ्लैटर से फुलाकर करने से लिंट त्रुटि गायब हो जाती है। सोचा था कि मैं इसे यहाँ पोस्ट करूँगा क्योंकि यह धागा Google खोज के शीर्ष पर है ...

view = View.inflate(context,R.layout.custom_layout,null);

31

जब आपके पास वास्तव में कोई भी नहीं है parent(उदाहरण के लिए दृश्य बनाने के लिए AlertDialog), तो आपके पास पास होने के अलावा और कोई रास्ता नहीं है null। तो चेतावनी से बचने के लिए ऐसा करें:

final ViewGroup nullParent = null;
convertView = layoutInflater.inflate(R.layout.list_item, nullParent);

59
दमन को काम करने के मामले में दबाने से बेहतर होगा।
StarWind0

2
मुझे यकीन नहीं है कि यह उत्तर सही है। मैं सफलतापूर्वक उपयोग कर रहा हूं कि मेरी गतिविधि की लेआउट फ़ाइल में सबसे बाहरी कंटेनर की आईडी ViewGroup root = (ViewGroup) myActivity.findViewById(R.id.my_main_content);कहां my_main_contentहै।
प्रतिबंध-जियोइंजीनियरिंग

10
इस एक के लिए लिंट को दबाने के लिए, @SuppressLint("InflateParams")अपने तरीके से ऊपर जोड़ें ।
प्रतिबंध-जियोइंजीनियरिंग


6

इसे हल करने के लिए रास्ता ढूंढते समय एक अच्छी जानकारी मुझे मिली। डेव स्मिथ के अनुसार,

लेआउट मुद्रास्फीति एंड्रॉइड के संदर्भ में उपयोग किया जाने वाला शब्द है, यह इंगित करने के लिए कि एक्सएमएल लेआउट संसाधन पार्स किया गया है और व्यू ऑब्जेक्ट्स के पदानुक्रम में परिवर्तित हो गया है।

ViewGroupपर बाद में अपने अनुप्रयोग के लिए गंभीर समस्याएं पैदा कर यहां के लिए कहा गया फुलाना विधि मानकों के हिस्से के रूप उच्च स्तर styling.While गुजर अशक्त वारिस के लिए हानिरहित लग सकता है प्रयोग किया जाता है, यह कर सकते हैं वास्तव में। इसके बारे में यहाँ और पढ़ें


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