我正在使用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函数永远不会运行而且没有返回任何内容?
答案 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);
}