无条件的布局通货膨胀来自视图适配器警告



我在警报对话中使用gridview与以下代码使用。给我标题中的错误。我的代码和更多必需的信息如下。

  private void showGotoPageDialog() {
        final Dialog mDialog = new Dialog(getActivity());
        mDialog.setContentView(R.layout.grid_dialogue);
        mDialog.getWindow().setLayout(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT);
        GridView mGridView = (GridView) mDialog.findViewById(R.id.grid_dialog);
        ArrayList<String> tmp = new ArrayList<>(mPageOptions.length);
        for(int i = 0; i < mPageOptions.length; i++)
        {
            tmp.add(mPageOptions[i].split(" ")[1]);
        }
        CustomAdapter adapter = new CustomAdapter(getActivity(), tmp, mPageIndx);
        //ArrayAdapter<String> adapter = new ArrayAdapter<String>(getActivity(), android.R.layout.simple_list_item_1, tmp);
        mGridView.setAdapter(adapter);
        mGridView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> adapterView, View view, int item, long l) {
                mDialog.dismiss();
                mPageIndx = item + 1;
                updateQuotesListServer();
                updatePageInfo();
            }
        });
        mDialog.show();
        TextView dismiss = (TextView) mDialog.findViewById(R.id.dialog_dismiss);
        dismiss.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                mDialog.dismiss();
            }
        });
    }

和这样的适配器

 private class CustomAdapter extends BaseAdapter
    {
        private ArrayList<String> list;
        private LayoutInflater inflater;
        private int currentPage;
        CustomAdapter(Activity activity, ArrayList<String> list, int currentPage)
        {
            this.list = new ArrayList<>();
            this.list.addAll(list);
            inflater = (LayoutInflater) activity.getSystemService(AppCompatActivity.LAYOUT_INFLATER_SERVICE);
            this.currentPage = currentPage;
        }
        public void setCurrentPage(int currentPage)
        {
            this.currentPage = currentPage;
        }
        @Override
        public int getCount() {
            return list.size();
        }
        @Override
        public Object getItem(int i) {
            return null;
        }
        @Override
        public long getItemId(int i) {
            return i;
        }
        @Override
        public View getView(int i, View view, ViewGroup viewGroup) {
            view = View.inflate(getActivity(),R.layout.dialogue_item, null);
            TextView txt = (TextView) view.findViewById(R.id.textview_dialogue);
            txt.setText(list.get(i));
            if(i == currentPage-1)
            {
                txt.setTextColor(Color.BLACK);
            }
            return view;
        }
    }

它给我在这条线上的警告

view = View.inflate(getActivity(),R.layout.dialogue_item, null);

警告如下

Unconditional layout inflation from view adapter: Should use View Holder pattern (use recycled view passed into this method as the second parameter) for smoother scrolling.

我的代码按预期工作正常,我没有面临任何问题。I want know that What changes require for fix this and what is benefit of it ?让我知道是否有人可以帮助我从中出来并解决我的疑问。

谢谢

构建视图适配器,以便可以重复使用滚动屏幕的视图,而不是为每个项目创建一个新视图(它们通过getView的第二个参数传递)。您被警告说,您应该尝试重复使用这些观点,而不是始终夸大新观点。将行更改为

if (view == null) view = View.inflate(getActivity(),R.layout.dialogue_item, null);

尝试一下

view = View.inflate(R.layout.dialogue_item, viewGroup, null);

如果没有必要,换句话说,如果视图不是零,则无需在getView()方法中调用以下行:

view = inflter.inflate(R.layout.spinner_rect, null);

问题出现在网络上可用的错误源代码:https://abhiandroid.com/ui/custom-spinner-examples.htmlhttps://demonuts.com/android-custom-spinner-image/应用我的解决方案以获取正确性

感谢您的有用答案:我有相同的错误,但是我使用的是视图绑定。使用这种方法解决。

最新更新