programing

null을 뷰 루트로 전달하지 않도록 합니다( 부풀린 레이아웃의 루트 요소에서 레이아웃 매개 변수를 확인해야 함).

newstyles 2023. 8. 2. 08:53

null을 뷰 루트로 전달하지 않도록 합니다( 부풀린 레이아웃의 루트 요소에서 레이아웃 매개 변수를 확인해야 함).

루트 스튜디오에 null을 전달하면 다음 경고가 표시됩니다.

null을 뷰 루트로 전달하지 않도록 합니다( 부풀린 레이아웃의 루트 요소에서 레이아웃 매개 변수를 확인해야 함).

다음에 null 값을 표시하고 있습니다.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;
    }

}

하는 대신에

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

하다, 하다, 하다, 하다, 하다, 하다, 하다, 하다, 나다

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

지정된 상위 항목으로 확장되지만 상위 항목에 연결되지는 않습니다.

에 대한 좋은 기사를 찾았습니다.LayoutInflater저자는 모든 버전이 어떻게 사용되는지 설명합니다.inflate방법 작업 및 예를 제시합니다.ListView그리고.AlertDialog

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

업데이트 #1.

이 대답은 최근 저에게도 도움이 되었습니다.https://stackoverflow.com/a/5027921/1065835

여기 있습니다. 어떤 이유에서인지 레이아웃에서 평면으로 부풀리는 대신 View.plate를 사용하면 보풀 오류가 사라집니다.이 스레드가 구글 검색의 맨 위에 있기 때문에 여기에 게시해야 한다고 생각했습니다.

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

편집:

이 답변을 작성할 당시 저는 린트 억제에 대해 알지 못했습니다.IDE를 속이지 말고 린트를 억제하는 것이 좋습니다.행 또는 메서드 위에 추가합니다.

@SuppressLint("InflateParams")

이전 답변:

당신이 정말로 아무것도 가지고 있지 않을 때.parent(예: 보기 만들기)AlertDialog), 당신은 통과하는 것 외에 다른 방법이 없습니다.null따라서 경고를 방지하려면 다음을 수행합니다.

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

위해서AlertDialog아래 코드를 사용할 수 있습니다.

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

이것을 해결할 방법을 찾다가 찾은 좋은 정보.데이브 스미스에 따르면,

레이아웃 확장은 Android의 컨텍스트에서 XML 레이아웃 리소스가 구문 분석되고 View 개체의 계층 구조로 변환되는 시기를 나타내는 데 사용되는 용어입니다.

ViewGroup보다 높은 수준의 스타일링을 상속하기 위해 가압 방법 매개 변수의 일부가 사용되기 때문에 여기에 요청되었습니다.null을 통과하는 것은 해롭지 않은 것처럼 보일 수 있지만 실제로 나중에 앱에 심각한 문제를 일으킬 수 있습니다.자세한 내용은 여기를 참조하십시오.

다음은 참조용 사진입니다.

enter image description here

return inflater.inflate(R.layout.some_layout, container, true); 
// for the last parameter use true, false or simply don't declare

언급URL : https://stackoverflow.com/questions/24832497/avoid-passing-null-as-the-view-root-need-to-resolve-layout-parameters-on-the-in