代码之家  ›  专栏  ›  技术社区  ›  Vikas Biradargoudar

ListView问题?

  •  0
  • Vikas Biradargoudar  · 技术社区  · 7 年前

    我正在使用列表视图请求android的权限。我已经创建了一个自定义适配器。问题是,在列表视图中,只有适配器数组的第一个元素是可见的(TextView),其余的项是不可见的。

    以下是代码参考:

    private class ListViewAdapter extends ArrayAdapter<String>{
            private int layout;
    
            private ListViewAdapter(Context context, int resource, List<String> objects){
                super(context,resource,objects);
                layout = resource;
            }
    
            @NonNull
            @Override
            public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) {
                ViewHolder mainViewHolder = null;
                if(convertView == null){
                    LayoutInflater inflater = LayoutInflater.from(getContext());
                    convertView = inflater.inflate(layout,parent,false);
                    ViewHolder holder = new ViewHolder();
                    holder.textView = (TextView)convertView.findViewById(R.id.permision_list_view_text);
                    holder.switchCompat = (SwitchCompat)convertView.findViewById(R.id.permision_list_view_switch);
                    convertView.setTag(holder);
                }else{
                    mainViewHolder = (ViewHolder)convertView.getTag();
                    mainViewHolder.textView.setText(getItem(position));
                }
                return convertView;
            }
    
        }
    

    正在初始化列表视图:

    @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
                                 Bundle savedInstanceState) {
            // Inflate the layout for this fragment
            View view = inflater.inflate(R.layout.fragment_permission_request_dialog, container, false);
            ListView lv = (ListView)view.findViewById(R.id.permission_request_list_view);
            getPermissionArray();
            Log.d("permissions",permissions.toString());
            lv.setAdapter(new ListViewAdapter(getContext(),R.layout.permission_dialog_listview_row,permissions));
            return  view;
        }
    

    阵列适配器:

    public void getPermissionArray(){
            permissions.add("Request 1");
            permissions.add("Request 2");
            permissions.add("Request 3");
        }
    

    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_gravity="center"
        android:paddingHorizontal="20dp"
        android:paddingVertical="10dp">
    
        <TextView
            android:id="@+id/permision_list_view_text"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:fontFamily="sans-serif-condensed"
            android:textColor="@color/colorBlack" />
    
        <android.support.v7.widget.SwitchCompat
            android:id="@+id/permision_list_view_switch"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentEnd="true"
            android:layout_alignParentRight="true"
            android:layout_centerVertical="true" />
    </RelativeLayout>
    

    我不明白为什么列表视图不完整。

    enter image description here

    任何帮助都将不胜感激。

    2 回复  |  直到 7 年前
        1
  •  2
  •   Dhaval    7 年前
    @NonNull
            @Override
            public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) {
                View rowView = convertView;
                if(rowView == null){
                    LayoutInflater inflater = LayoutInflater.from(getContext());
                    rowView = inflater.inflate(layout,parent,false);
                    ViewHolder holder = new ViewHolder();
                    holder.textView = (TextView)rowView.findViewById(R.id.permision_list_view_text);
                    holder.switchCompat = (SwitchCompat)rowView.findViewById(R.id.permision_list_view_switch);
                    rowView.setTag(holder);
                }
    
                ViewHolder holder = (ViewHolder) rowView.getTag();
    
                // Set your permission data here using holder
    
                return rowView;
            }
    
        2
  •  2
  •   nupadhyaya    7 年前

    您将列表项的文本设置在错误的位置:

        @NonNull
        @Override
        public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) {
            ViewHolder mainViewHolder = null;
            if(convertView == null){
                LayoutInflater inflater = LayoutInflater.from(getContext());
                convertView = inflater.inflate(layout,parent,false);
                ViewHolder holder = new ViewHolder();
                holder.textView = (TextView)convertView.findViewById(R.id.permision_list_view_text);
                holder.switchCompat = (SwitchCompat)convertView.findViewById(R.id.permision_list_view_switch);
                convertView.setTag(holder);
            }else{
                mainViewHolder = (ViewHolder)convertView.getTag();
                //mainViewHolder.textView.setText(getItem(position)); // not here. This else section is reached only when the rows are getting recycled. 
            }
            mainViewHolder.textView.setText(getItem(position)); // here
            return convertView;
        }
    
    }