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