Gridview与自定义适配器不工作和适配器getView不在Android中运行

时间:2016-03-10 00:26:09

标签: android android-gridview

我正在使用Android Studio开发Android应用。在我的应用程序中,我需要使用网格视图,因为我的应用程序包含一些类似Facebook新进源的功能。我正在使用排球来从服务器请求数据。

我为网格视图创建了一个自定义数组适配器。但问题是,即使排球请求成功并且包含很多项目,也没有任何内容绑定到网格视图。我%100肯定齐射和服务器端正常工作。但没有任何东西绑定到网格视图。以下是我的代码。

我的自定义适配器类

public class ItemListAdapter extends ArrayAdapter<Item>{
    private ArrayList<Item> values;
    private Context context;

    static class ViewHolder{
        public ImageView imageViewItemImg;
        public TextView tvItemName;
        public TextView tvItemPrice;
        public TextView tvItemLikeCount;
    }

    public ItemListAdapter(Context contextParam,ArrayList<Item> valuesParam)
    {
        super(contextParam,-1,valuesParam);
        this.context = contextParam;
        this.values = valuesParam;
    }
    @Override
    public View getView(final int position,View convertView,ViewGroup parent)
    {
        View rowView = convertView;
        ViewHolder viewHolder;
        if(rowView==null)
        {
            LayoutInflater layoutInflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            rowView = layoutInflater.inflate(R.layout.item_list_item_view,null);

            viewHolder = new ViewHolder();
            viewHolder.imageViewItemImg = (ImageView) rowView.findViewById(R.id.item_list_view_item_image);
            rowView.setTag(viewHolder);
        }
        else{
            viewHolder  = (ViewHolder) rowView.getTag();
        }
        rowView.setId(values.get(position).getId());
        if(values.get(position).getMediumImageUrl()!=null && values.get(position).getMediumImageUrl().isEmpty()==false)
        {
            Picasso.with(context).load(values.get(0).getMediumImageUrl()).into(viewHolder.imageViewItemImg);
        }
        return rowView;
    }
}

我的网格视图片段

 public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
 .
 .
 .
 listItems = new ArrayList<Item>();
 adapter = new ItemListAdapter(getActivity(),listItems);
 .
 .
 .
 .
 updateItemList();
 return view;
}

public void updateItemList()
{

.
.
.

JsonObjectRequest request = new JsonObjectRequest(Request.Method.GET, url, new JSONObject(paramString), new Response.Listener<JSONObject>() {
                @Override
                public void onResponse(JSONObject response) {
                    try{
                        String status = response.getString(getResources().getString(R.string.api_status));
                        if(status.equals(getResources().getString(R.string.api_status_success)))
                        {
                            //can be asked to login again
                            JSONArray items = response.getJSONArray("items");
                            ArrayList<Item> newItems = new ArrayList<Item>();
                            if(items.length()>0)
                            {
                                for(int i=0;i<items.length();i++)
                                {
                                    Item item = new Item();
                                    item.setMediumImageUrl(items.getString(i));
                                    newItems.add(item);
                                }
                            }

                            if(newItems.size()>0)
                            {
                                listItems.addAll(newItems);
                                adapter.notifyDataSetChanged();
                            }
                        }
                        else{
                            showMessageDialog("Server error encountered");
                        }
                    }
                    catch (JSONException e)
                    {
                        showMessageDialog("An error encountered");
                    }
                    page++;
                }
            }, new Response.ErrorListener() {
                @Override
                public void onErrorResponse(VolleyError error) {
                    showMessageDialog(error.getMessage());
                }
            });
            VolleySingleton.getInstance(getActivity()).addToRequestQueue(request);

.
.
.
}

片段

的布局文件
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent">

    <TextView
        android:text="Item List"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />
    <GridView
        android:id="@+id/gv_item_list"
        android:layout_width="match_parent"
        android:layout_height="match_parent"></GridView> </LinearLayout>

这是网格视图的行或项目布局。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent">

    <ImageView
        android:id="@+id/item_list_view_item_image"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />
</LinearLayout>

为什么getView函数永远不会运行而且没有返回任何内容?

2 个答案:

答案 0 :(得分:0)

此行永远不会被调用,这就是为什么,所以修复它

if(newItems.size()>0) {
    listItems.addAll(newItems);
    adapter.notifyDataSetChanged();
}

我的意思是这种情况从未得到满足。实际调试它。

答案 1 :(得分:0)

adapter = new ItemListAdapter(getActivity(),listItems); 

您在Oncreateview中执行此操作,其中listitems为null

if(newItems.size()>0){ 
  listItems.addAll(newItems); 
  adapter = new ItemListAdapter(getActivity(),listItems); 
  griview.setAdapter(adapter); 
}