带有自定义适配器的Gridview不工作,且适配器getView未在Android中运行
我正在使用Android Studio开发一个Android应用程序。在我的应用程序中,我需要使用grid view,因为我的应用程序包含一些功能,比如Facebook newfeeds。我正在使用截击从服务器请求数据 我为网格视图创建了一个自定义阵列适配器。但问题是,即使截击请求成功并且包含了这么多项,也没有任何内容绑定到网格视图。我百分之百确信截击和服务器端工作正常。但没有任何内容绑定到网格视图。下面是我的代码 我的自定义适配器类带有自定义适配器的Gridview不工作,且适配器getView未在Android中运行,android,android-gridview,Android,Android Gridview,我正在使用Android Studio开发一个Android应用程序。在我的应用程序中,我需要使用grid view,因为我的应用程序包含一些功能,比如Facebook newfeeds。我正在使用截击从服务器请求数据 我为网格视图创建了一个自定义阵列适配器。但问题是,即使截击请求成功并且包含了这么多项,也没有任何内容绑定到网格视图。我百分之百确信截击和服务器端工作正常。但没有任何内容绑定到网格视图。下面是我的代码 我的自定义适配器类 public class ItemListAdapter e
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;
}
}
公共类ItemListAdapter扩展了ArrayAdapter{
私有数组列表值;
私人语境;
静态类视窗夹{
公共图像查看图像查看项目img;
公共文本视图TVTItemName;
公共文本视图tvItemPrice;
公共文本视图TVTItemLikeCount;
}
public ItemListAdapter(上下文上下文参数,ArrayList值SPARAM)
{
super(contextParam,-1,valuesParam);
this.context=contextParam;
this.values=valuesParam;
}
@凌驾
公共视图getView(最终整数位置、视图转换视图、视图组父视图)
{
视图行视图=转换视图;
持票人持票人;
if(rowView==null)
{
LayoutInflater LayoutInflater=(LayoutInflater)context.getSystemService(context.LAYOUT\u INFLATER\u SERVICE);
rowView=LayoutFlater.充气(R.layout.item\u列表\u item\u视图,空);
viewHolder=新的viewHolder();
viewHolder.imageViewItemImg=(ImageView)rowView.findViewById(R.id.item\u list\u view\u item\u image);
rowView.setTag(viewHolder);
}
否则{
viewHolder=(viewHolder)rowView.getTag();
}
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);
}
返回行视图;
}
}
我的片段与网格视图
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);
.
.
.
}
创建视图时的公共视图(布局、充气机、视图组容器、捆绑包保存状态){
.
.
.
listItems=new ArrayList();
adapter=newitemlistadapter(getActivity(),listItems);
.
.
.
.
updateItemList();
返回视图;
}
public void updateItemList()
{
.
.
.
JsonObjectRequest=新的JsonObjectRequest(request.Method.GET、url、新的JSONObject(paramString)、新的Response.Listener(){
@凌驾
公共void onResponse(JSONObject响应){
试一试{
字符串状态=response.getString(getResources().getString(R.String.api_status));
if(status.equals(getResources().getString(R.string.api_status_success)))
{
//可以要求重新登录
JSONArray items=response.getJSONArray(“items”);
ArrayList newItems=新的ArrayList();
如果(items.length()>0)
{
对于(int i=0;i0)
{
listItems.addAll(newItems);
adapter.notifyDataSetChanged();
}
}
否则{
showMessageDialog(“遇到服务器错误”);
}
}
捕获(JSONException e)
{
showMessageDialog(“遇到错误”);
}
page++;
}
},new Response.ErrorListener(){
@凌驾
公共无效onErrorResponse(截击错误){
showMessageDialog(error.getMessage());
}
});
getInstance(getActivity()).addToRequestQueue(请求);
.
.
.
}
片段的布局文件
<?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函数永远不会运行并且不会返回任何内容?这行永远不会被调用,这就是为什么,所以请修复它
if(newItems.size()>0) {
listItems.addAll(newItems);
adapter.notifyDataSetChanged();
}
我的意思是,这个条件永远不会满足。实际上,调试它。这一行永远不会被调用,这就是为什么,所以请修复它
if(newItems.size()>0) {
listItems.addAll(newItems);
adapter.notifyDataSetChanged();
}
adapter = new ItemListAdapter(getActivity(),listItems);
我的意思是,这个条件从来没有满足过。实际上,调试它
adapter = new ItemListAdapter(getActivity(),listItems);
您正在Oncreateview中执行此操作,其中listitems为null
if(newItems.size()>0){
listItems.addAll(newItems);
adapter = new ItemListAdapter(getActivity(),listItems);
griview.setAdapter(adapter);
}
您正在Oncreateview中执行此操作,其中listitems为null
if(newItems.size()>0){
listItems.addAll(newItems);
adapter = new ItemListAdapter(getActivity(),listItems);
griview.setAdapter(adapter);
}
这是您的完整适配器代码。现在是。因为我正在首先测试它。
@Override public int getCount(){return values.size();}
尝试将此添加到您的适配器。不,它不工作。甚至getView也没有运行。@Override public int getCount(){return values.size();}@Override public Object getItem(int position){return position;}@Override public long getItemId(int position){return position;}
尝试将此添加到适配器。这是您的完整适配器代码吗。现在是。因为我正在首先测试它。@Override public int getCount(){return values.size();}
尝试将其添加到适配器。不,它不起作用。甚至getView也没有运行。@Override public int getCount(){return values.size();}@Override public Object getItem(int position){return position;}@Override public long getItemId(int position){return position;}
尝试将其添加到适配器。当截击请求成功时,我将更新它。当截击请求成功时,我将更新它。