2016-03-10 2 views
0

Я разрабатываю приложение для Android с помощью Android Studio. В моем приложении мне нужно работать с сеткой, потому что в моем приложении есть некоторые функции, подобные фреймворкам newfeeds. Я использую volley для запроса данных с сервера. Я создал пользовательский адаптер массива для просмотра сетки. Но проблема в том, что ничто не привязывает к виду сетки, даже если запрос волейбола является успешным и содержит так много элементов. Я% 100 уверен, что залп и серверная часть работают правильно. Но привязка к сетке не привязана. Ниже мой код.Gridview с пользовательским адаптером не работает и адаптер getView не запускается в Android

Мой заказ адаптер класса

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

Это ваш полный код адаптера. – Dhina

+0

Да на данный момент. Потому что я сначала тестирую его. –

+0

'@Override public int getCount() { return values.size(); } ' попробуйте добавить это к вашему адаптеру. – Dhina

ответ

0

Эта строка никогда не вызывается, поэтому, так это исправить

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

я имею в виду условие никогда не встречались. фактически отлаживать его.

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

вы делаете это в Oncreateview где Элементы список равен нулем

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

Я обновляю его, когда запрос на залп является успешным. –

 Смежные вопросы

  • Нет связанных вопросов^_^