Görünüm kökü olarak null değerini geçmekten kaçının (şişirilmiş düzenin kök öğesindeki düzen parametrelerini çözmeniz gerekir)


230

Kök stüdyo için null değerini iletmek bana şu uyarıyı verir:

Görünüm kökü olarak null değerini geçmekten kaçının (şişirilmiş düzenin kök öğesindeki düzen parametrelerini çözmeniz gerekir)

İçinde null değer gösteriyor getGroupView. Lütfen yardım et.

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;
    }

}

Yanıtlar:


364

Yapmak yerine

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

yapmak

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

Verilen ebeveyni şişirir, fakat ebeveyne eklemez.


26
@Coeffect ama Faaliyet içinden şişirirken ne kullanmalıyım? Ebeveyn yerine ne kullanmalıyım?
Alexander Kuznetsov

3
@AlexanderKuznetsov Sanırım ne yapmaya çalıştığınıza bağlı. Etkinlik için içerik ayarlamaya çalışıyorsanız, kullanmanız gerekir setContentView(layoutId). Mevcut bir ViewGroup'a yeni bir görünüm eklemeye çalışıyorsanız, büyük olasılıkla üst öğeyi iletmeniz ve şişiricinin yeni görünümü eklemesine izin vermeniz gerekir.
Katsayı

@LucasTan TabContentFactory TabHost bir referans tutmak ve şişirme sırasında bunu ebeveyn olarak kullanmak sanırım, ama bunun en iyi çözüm olup olmadığından emin değilim. CreateTabContent yönteminin üst / bağlam sağlaması gariptir.
Kasım'daki katsayı

4
Aynı sorun (ebeveyn yok) onCreateInputView()bir InputMethodService.
Ted Hopp

2
alertdialog için özel görünüm hakkında ne, ebeveyn ne olmalı?
user25


38

İşte, bazı nedenlerden dolayı, bir layoutinflater şişirme yerine View.inflate kullanarak tüy bırakma hatası ortadan kaldırır. Bu konu Google Arama'nın en üstünde olduğu için bunu buraya göndereceğimi düşündüm ...

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

31

Gerçekten hiç olmadığınızda parent(örneğin görünüm oluşturmak için AlertDialog), geçmekten başka bir yolunuz yoktur null. Uyarı yapmaktan kaçınmak için bunu yapın:

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

59
Bastırma yapmak, tiftiği işe aldatmaktan daha iyidir.
StarWind0

2
Bu cevabın doğru olduğundan emin değilim. Etkinliğimin düzen dosyasındaki en dıştaki kapsayıcı kimliği ViewGroup root = (ViewGroup) myActivity.findViewById(R.id.my_main_content);nerede kullanıyorum my_main_content.
ban-geoengineering

10
Bunun için Lint'i bastırmak @SuppressLint("InflateParams")için yönteminizin üstüne ekleyin.
ban-geoengineering

7

İçin AlertDialogferyat kod kullanılabilir

convertView = layoutInflater.inflate(R.layout.list_item, findViewById(android.R.id.content), false);

6

Bunu çözmenin bir yolunu ararken bulduğum güzel bir bilgi. Dave Smith'e göre,

Düzen şişirme, bir XML düzen kaynağının ne zaman ayrıştırıldığını ve bir View nesneleri hiyerarşisine dönüştürüldüğünü belirtmek için Android bağlamında kullanılan terimdir.

ViewGroupDaha sonra üzerine uygulamanız için ciddi sorunlara neden aslında zararsız görünebilir üst düzey styling.While geçen null adlı miras için kullanılan şişirme yöntemi parametrelerinin bir parçası olarak burada için olabilir istendi. Bununla ilgili daha fazla bilgiyi buradan edinebilirsiniz .


Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.