java - 来自 View 适配器警告的无条件布局膨胀

标签 java android android-layout

我在带有以下代码的警报对话框中使用 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.

我的代码按预期正常工作,我没有遇到任何问题。 我想知道修复此问题需要进行哪些更改以及它有什么好处?让我知道是否有人可以帮助我解决这个问题并解决我的疑问。

谢谢

最佳答案

View Adapter 的构建不是为每个项目创建一个新 View ,而是可以重用滚动到屏幕外的 View (它们通过 getView 的第二个参数传入)。你被警告你应该尝试重用这些 View 而不是总是膨胀新的 View 。将行更改为

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

关于java - 来自 View 适配器警告的无条件布局膨胀,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46524029/

相关文章:

java - Array.copyOf() 的时间复杂度

android - Barchart 的大小随着 AchartEngine 中 Tabs 的变化而变化

安卓 Material 芯片

java - jmathplot 在 swing 应用程序中不起作用

java - 在 Spring 中将数组设置为 SqlParameterSource

java - 如何在java中设置mp3文件的专辑封面

java - 安卓模拟器 : Process finished with exit code -529697949

Activity 选项卡内的 Android 主细节布局避免嵌套 fragment

android - Android中矩形圆角的最大值

安卓菜单不显示