ভিউ রুট হিসাবে নাল পাস করা এড়িয়ে চলুন (স্ফীত লেআউটের মূল উপাদানটিতে বিন্যাসের পরামিতিগুলি সমাধান করা দরকার)


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
আমি মনে করি আপনি যা করার চেষ্টা করছেন আলেক্সান্ডারকুজনেটসভ নির্ভর করে। আপনি যদি ক্রিয়াকলাপের জন্য সামগ্রীটি সেট করার চেষ্টা করছেন তবে আপনার ব্যবহার করা উচিত setContentView(layoutId)। আপনি যদি কোনও বিদ্যমান ভিউগ্রুপে একটি নতুন ভিউ যুক্ত করার চেষ্টা করছেন, আপনার সম্ভবত পিতামাতাকে পাস করা উচিত এবং স্ফীতকে নতুন ভিউ সংযুক্ত করতে দেওয়া উচিত।
কোফেক্ট

@ লুকাসটান আমার ধারণা, আমি ট্যাবসন্টেন্ট ফ্যাক্টরিতে ট্যাবহোস্টের একটি উল্লেখ রেখেছিলাম এবং স্ফীতকালে অভিভাবক হিসাবে এটি ব্যবহার করি, তবে আমি এটির সেরা সমাধান কিনা তা নিশ্চিত নই। এটি আশ্চর্যজনক যে ক্রিয়েট্যাব কনটেন্ট পদ্ধতিটি প্যারেন্ট / প্রসঙ্গ সরবরাহ করে না।
Coeffect

4
এটির onCreateInputView()জন্য বাস্তবায়ন করার সময় একই সমস্যা (কোনও পিতামাতা) আসে না InputMethodService
টেড হপ

2
সতর্কতামূলক জন্য কাস্টম ভিউ সম্পর্কে কী, পিতামাতার কী হওয়া উচিত?
ব্যবহারকারী 25

52

আমি সম্পর্কে একটি ভাল নিবন্ধ খুঁজে পেয়েছি LayoutInflater। লেখক ব্যাখ্যা সমস্ত সংস্করণের inflateপদ্ধতি কাজ এবং দেয় উদাহরণ ListViewএবংAlertDialog

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

আপডেট # 1।

এই উত্তরটি আমাকে সম্প্রতি সহায়তা করেছে। https://stackoverflow.com/a/5027921/1065835


38

আপনি এখানে যান, কোনও কারণে লেআউটইনফ্লেটার থেকে স্ফীত করার পরিবর্তে ভিউ.ইন.ফ্লেট ব্যবহারের ফলে লিন্টের ত্রুটি অদৃশ্য হয়ে যায়। ভেবেছিলাম যে এই থ্রেডটি গুগল অনুসন্ধানের শীর্ষে রয়েছে তাই আমি এটি এখানে পোস্ট করব ...

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
কাজের প্রতি কথায় কথায় কুত্সা করার চেয়ে দমন করা ভাল।
স্টারউইন্ড 0

2
আমি নিশ্চিত না যে এই উত্তরটি সঠিক। আমার ক্রিয়াকলাপের লেআউট ফাইলের বহিরাগততম ধারকটির আইডি ViewGroup root = (ViewGroup) myActivity.findViewById(R.id.my_main_content);কোথায় my_main_contentতা আমি সফলভাবে ব্যবহার করছি ।
নিষিদ্ধ-জিওইনজিনিয়ারিং

10
এর জন্য লিন্টকে দমন করতে, @SuppressLint("InflateParams")আপনার পদ্ধতির উপরে যুক্ত করুন।
নিষেধাজ্ঞা-জিওইঞ্জিনিয়ারিং


6

এটি সমাধানের উপায় খুঁজতে গিয়ে একটি দুর্দান্ত তথ্য পেয়েছি D ডেভ স্মিথের মতে,

লেআউট মুদ্রাস্ফীতিটি কোনও এক্সএমএল লেআউট রিসোর্সকে বিশ্লেষণ এবং ভিউ অবজেক্টের শ্রেণিবিন্যাসে রূপান্তরিত করার সময় অ্যান্ড্রয়েডের প্রেক্ষাপটে ব্যবহৃত শব্দটি।

ViewGroupপরে আপনার অ্যাপের জন্য গুরুতর সমস্যা কারণ এখানে বলা হয়েছে ফোলান পদ্ধতি পরামিতি অংশ হিসেবে উচ্চ স্তরের styling.While ক্ষণস্থায়ী নাল উত্তরাধিকারী নিরীহ মনে করতে পারেন ব্যবহার করা হয়, এটা করতে পারেন আসলে। এখানে এই সম্পর্কে আরও পড়ুন ।


আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.