Android 自定义适配器不显示数据

Android 自定义适配器不显示数据,android,xml,fragment,custom-adapter,Android,Xml,Fragment,Custom Adapter,我开发了一个自定义适配器,它从SQLite获取数据。正在选择数据,适配器也会获取数据。但它不会显示在列表视图中。我没有发现任何错误。我在适配器中打印了数据,但只显示了一组数据。不是所有的数据 我已经开发并遵循了普通的自定义适配器实现示例 我有些怀疑 1-在我的customAdapter类中。当调用findviewById()时,为适配器中的自定义行扩展XML时,只有一个文本视图显示“它可能会产生空指针异常”。为什么?列表视图行的我的xml <RelativeLayout xmlns:and

我开发了一个自定义适配器,它从SQLite获取数据。正在选择数据,适配器也会获取数据。但它不会显示在列表视图中。我没有发现任何错误。我在适配器中打印了数据,但只显示了一组数据。不是所有的数据

我已经开发并遵循了普通的自定义适配器实现示例

我有些怀疑

1-在我的customAdapter类中。当调用findviewById()时,为适配器中的自定义行扩展XML时,只有一个文本视图显示“它可能会产生空指针异常”。为什么?列表视图行的我的xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
                android:orientation="vertical"
                android:paddingTop="4dip"
                android:paddingBottom="6dip"
                android:paddingLeft="10dip"
                android:paddingRight="10dip"
                android:layout_width="fill_parent"
                android:layout_height="fill_parent"
                android:weightSum="1">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/row_item_name"
        android:textColor="@color/item_name_color"
        android:layout_alignParentLeft="true"
        />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/row_item_price"

        android:textColor="@color/item_price_color"
        android:layout_alignParentTop="true"
        android:layout_alignParentRight="true"
        android:layout_alignParentEnd="true" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/row_item_contains"

        android:layout_gravity="left"
        android:layout_below="@id/row_item_name"
        android:layout_toRightOf="@id/row_item_name" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"

        android:id="@+id/row_item_quantity"
        android:layout_above="@id/row_item_contains"
        android:paddingRight="10dip"
        android:layout_toLeftOf="@id/row_item_price" />


</RelativeLayout>

  • 在我的fragment类中,上面也显示了膨胀列表视图元素的警告。 下面给出了我的xml片段

    <TextView
        android:id="@+id/tableTextview"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="left"
        android:text="@string/table"
        android:layout_alignParentTop="true"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true" />
    
    <TextView
        android:id="@+id/userName"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentEnd="true"
        android:layout_alignParentRight="true"
        android:layout_gravity="right"
        android:textColor="@color/bg" />
    
    
    
    <EditText
        android:paddingTop="6dp"
        android:id="@+id/tableNumber"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:inputType="number"
        android:maxWidth="@dimen/tableNoSize"
        android:layout_below="@id/tableTextview"
        android:layout_alignRight="@id/tableTextview"
        android:layout_alignEnd="@id/tableTextview" />
    
    <TextView
        android:id="@+id/textView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@id/tableNumber"
        android:layout_alignStart="@id/tableNumber"
        android:layout_below="@id/tableNumber"
        android:layout_gravity="center"
        android:paddingTop="6dip"
        android:paddingBottom="4dip"
        android:text="@string/Menu" />
    
    <ListView
        android:layout_below="@id/textView"
        android:id="@+id/bearer_menu_order_list"
        android:layout_width="wrap_content"
        android:layout_height="0dp">
    </ListView>
    
    <Button
        android:id="@+id/placeButton"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@id/textView"
        android:layout_gravity="center_horizontal"
        android:background="@color/buttonColor"
        android:text="@string/placeOrder" />
    

    
    

  • 我的适配器代码

        public class MenuListAdapter extends BaseAdapter {
        private List<MenuData> list;
        private Context context;
    
        public MenuListAdapter(Context context, List<MenuData> list) {
            this.context = context;
            this.list = list;
            Log.e("Hee",list.size()+"");
        }
        @Override
        public int getCount() {
            return list.size();
        }
    
        @Override
        public Object getItem(int position) {
            return list.get(position);
        }
    
        @Override
        public long getItemId(int position) {
            return position;
        }
    
        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
    
            //Log.e("list got--",""+list.size());
            Log.e("position ",""+position);
    
            ViewHolder holder;
            LayoutInflater inflater =(LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    
            if (convertView == null){
                convertView = inflater.inflate(R.layout.row_list_create_new,null);
                holder = new ViewHolder();
                try{
                    holder.txtName=(TextView)convertView.findViewById(R.id.row_item_name);
                    holder.txtContains=(TextView)convertView.findViewById(R.id.row_item_contains);
                    holder.txtPrice=(TextView)convertView.findViewById(R.id.row_item_price);
                    holder.txtQuantity=(TextView)convertView.findViewById(R.id.row_item_quantity);
                    convertView.setTag(holder);
                    Log.e("covertView-","Null");
                }
                catch (NullPointerException e){
                    e.printStackTrace();
                }
    
            }
            else {
                Log.e("covertView-","Not Null");
                holder = (ViewHolder) convertView.getTag();
            }
    
            MenuData currentRow=list.get(position);
            Log.e("item ",currentRow.getKEY_ITEM_NAME());
            holder.txtName.setText(currentRow.getKEY_ITEM_NAME());
            holder.txtContains.setText(currentRow.getKEY_ITEM_CONTENTS());
            holder.txtPrice.setText(currentRow.getKEY_PRICE());
    
            return convertView;
        }
    
    
        class ViewHolder {
            public TextView txtName;
            public TextView txtPrice;
            public TextView txtContains;
            public TextView txtQuantity;
    
        }
    
    }
    
    公共类MenuListAdapter扩展BaseAdapter{
    私人名单;
    私人语境;
    公共菜单StatAdapter(上下文、列表){
    this.context=上下文;
    this.list=列表;
    Log.e(“Hee”,list.size()+”);
    }
    @凌驾
    public int getCount(){
    返回list.size();
    }
    @凌驾
    公共对象getItem(int位置){
    返回列表。获取(位置);
    }
    @凌驾
    公共长getItemId(int位置){
    返回位置;
    }
    @凌驾
    公共视图getView(int位置、视图转换视图、视图组父视图){
    //Log.e(“list-got-”,“”+list.size());
    Log.e(“位置”,“位置+位置”);
    视窗座;
    LayoutFlater充气器=(LayoutFlater)context.getSystemService(context.LAYOUT\u充气器\u服务);
    if(convertView==null){
    convertView=充气机。充气(R.layout.row\u list\u create\u new,null);
    holder=新的ViewHolder();
    试一试{
    holder.txtName=(TextView)convertView.findViewById(R.id.row\u item\u name);
    holder.txtContains=(TextView)convertView.findViewById(R.id.row\u item\u contains);
    holder.txtPrice=(TextView)convertView.findViewById(R.id.row\u item\u price);
    holder.txtQuantity=(TextView)convertView.findViewById(R.id.row\u item\u quantity);
    convertView.setTag(支架);
    Log.e(“covertView-”,“Null”);
    }
    捕获(NullPointerException e){
    e、 printStackTrace();
    }
    }
    否则{
    Log.e(“covertView-”,“非空”);
    holder=(ViewHolder)convertView.getTag();
    }
    MenuData currentRow=list.get(位置);
    Log.e(“item”,currentRow.getKEY_item_NAME());
    holder.txtName.setText(currentRow.getKEY_ITEM_NAME());
    holder.txtContains.setText(currentRow.getKEY_ITEM_CONTENTS());
    holder.txtPrice.setText(currentRow.getKEY_PRICE());
    返回视图;
    }
    类视图持有者{
    公共文本视图txtName;
    公共文本视图txtPrice;
    公共文本视图txtContains;
    公共文本视图txtQuantity;
    }
    }
    
    片段代码是

     public class CreateOrderFragment extends Fragment {
    
        List<MenuData> listMenu;
        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
                                 Bundle savedInstanceState) {
            View rootView;
            listMenu=new ArrayList<MenuData>();
            rootView = inflater.inflate(R.layout.fragment_create_new_order_list_sections, container, false);
            Context context=getActivity();
            //View view=getView();
            ListView menuList;
            menuList=(ListView) rootView.findViewById(R.id.bearer_menu_order_list);
            menuList.setVisibility(View.VISIBLE);
            DatabaseHelper helper=new DatabaseHelper(context);
            listMenu = helper.getMenuItem();
            Log.e("list menu--",listMenu.size()+"");
            MenuListAdapter adapter=new MenuListAdapter(context,listMenu);
            Log.e("list adapter--",""+adapter.getCount());
            menuList.setAdapter(adapter);
            menuList.setVisibility(View.VISIBLE);
    
            return rootView;
        }
    
    
    
        @Override
        public void onCreate(Bundle savedInstanceState) {
    
            super.onCreate(savedInstanceState);
    
            String user;
            TextView tv;
    }
    }
    
    公共类CreateOrderFragment扩展了片段{
    列表菜单;
    @凌驾
    创建视图上的公共视图(布局、充气机、视图组容器、,
    Bundle savedInstanceState){
    视图根视图;
    listMenu=新建ArrayList();
    rootView=充气机.充气(R.layout.fragment\u create\u new\u order\u list\u sections,container,false);
    Context=getActivity();
    //View=getView();
    列表视图菜单列表;
    menuList=(ListView)rootView.findViewById(R.id.bearer\u menu\u order\u list);
    menuList.setVisibility(View.VISIBLE);
    DatabaseHelper=新的DatabaseHelper(上下文);
    listMenu=helper.getMenuItem();
    Log.e(“列表菜单--”,列表菜单.size()+”);
    MenuListAdapter=新的MenuListAdapter(上下文,列表菜单);
    Log.e(“列表适配器--”,“”+adapter.getCount());
    menuList.setAdapter(适配器);
    menuList.setVisibility(View.VISIBLE);
    返回rootView;
    }
    @凌驾
    创建时的公共void(Bundle savedInstanceState){
    super.onCreate(savedInstanceState);
    字符串用户;
    文本视图电视;
    }
    }
    
    尝试以下方法:

     ListView menuList;
     public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View rootView;
        rootView = inflater.inflate(R.layout.fragment_create_new_order_list_sections, container, false);
    
        menuList=(ListView) rootView.findViewById(R.id.bearer_menu_order_list);
        DatabaseHelper helper=new DatabaseHelper(getActivity());
        listMenu = helper.getMenuItem();
        Log.e("list menu--",listMenu.size()+"");
        MenuListAdapter adapter=new MenuListAdapter(getActivity(),listMenu);
        Log.e("list adapter--",""+adapter.getCount());
        menuList.setAdapter(adapter);
        menuList.setVisibility(View.VISIBLE);
    
        return rootView;
    }
    

    并从ActivityCreated(..)中删除所有代码。并给我反馈。

    您可以为片段简单地实现onCreateView()

     ListView menuList;
    
     @Override
     public View onCreateView(LayoutInflater inflater,
      ViewGroup container, Bundle savedInstanceState) {
    
      // Inflate the layout for this fragment
    
        View rootView;
        rootView = inflater.inflate(R.layout.fragment_create_new_order_list_sections, container, false); 
        menuList=(ListView) rootView.findViewById(R.id.bearer_menu_order_list);
        DatabaseHelper helper=new DatabaseHelper(getActivity());
        listMenu = helper.getMenuItem();
        Log.e("list menu--",listMenu.size()+"");
        MenuListAdapter adapter=new MenuListAdapter(getActivity(),listMenu);
        Log.e("list adapter--",""+adapter.getCount());
        menuList.setAdapter(adapter);
        menuList.setVisibility(View.VISIBLE);
       return rootView;
     }
    
    在您的适配器类中,也可以在此处进行更改

     public class MenuListAdapter extends BaseAdapter {
     private List<MenuData> list;
     private Context context;
    
     public MenuListAdapter(Context context, List<MenuData> list) {
        this.context = context;
        this.list = list;
        Log.e("Hee",list.size()+"");
     }
    
    公共类MenuListAdapter扩展BaseAdapter{
    私人名单;
    私人语境;
    公共菜单StatAdapter(上下文、列表){
    this.context=上下文;
    this.list=列表;
    Log.e(“Hee”,list.size()+”);
    }
    

    从onActivityCreated()方法中删除所有代码。

    然后发布适配器代码。请将代码的相关部分发布好。现在将片段代码发布到ListView中绑定适配器的代码在哪里?menuList.setAdapter(Adapter);@Rashid只需正确查看我的答案..此处(ListView)视图。findViewById(R.id.bearer)\菜单\订单\列表)不查看其根视图。因此更改(ListView)根视图。findViewById(R.id.bearer\u menu\u order\u list)@Rashid在
    rootView的上下文中引用您的
    ListView
    ,而不是
    view
    as
    ListView menuList=(ListView)根视图。findViewById(R.id.bearer\u menu\u order\u list);
    @Rashid做一件事移动这一行(View.VISIBLE);to在这一行后面menuList=(ListView)rootView.findViewById(R.id.bearer\u menu\u order\u list);@Rashid当您从数据库中获取数据时,只需检查它是否获得了相同的数据,或者适配器中是否存在问题?然后我会告诉您。!这将用于android:layout\u height=“0dp”当您当时为ListView指定了权重时,其高度或宽度必须为0px,这取决于线性布局的方向。如果您设置了wrap_content,则表示它显示其原始高度或宽度。