2015-07-29 5 views
0

Когда я отлаживаю код, он вызывает конструкторы в InviteListAdapter, но не вызывает метод getView(). Я попытался использовать несколько решений в stackoverflow, но ни один из них не работает. Надеюсь, что любой может найти ошибку или решение для этого.Метод getView() не вызывается в пользовательском адаптере с gridview

invitableFriends.size()  

возвращает значение больше 0.

InviteListAdapter

public class inviteListAdapter extends ArrayAdapter<JSONObject> { 

private final Context context; 
private final List<JSONObject> invitableFriends; 
private ImageView profilePicView; 

public inviteListAdapter(Context context, List<JSONObject> invitableFriends) { 
    super(context, R.layout.invite_adapter, invitableFriends); 
    this.context = context; 
    this.invitableFriends = invitableFriends; 
} 


@Override 
public View getView(int position, View convertView, ViewGroup parent){ 


    LayoutInflater inflater = (LayoutInflater) context 
      .getSystemService(context.LAYOUT_INFLATER_SERVICE); 

    View listItemView = inflater.inflate(R.layout.invite_adapter, parent, false); 

    profilePicView = (ImageView) listItemView.findViewById(R.id.inviteListItemProfilePic); 
    TextView nameView = (TextView) listItemView.findViewById(R.id.inviteListItemName); 

    JSONObject currentUser = invitableFriends.get(position); 

    nameView.setText(currentUser.optString("first_name")); 


    return listItemView; 
} 

} 

first.java

public View onCreateView (
     LayoutInflater inflater, 
     ViewGroup container, 
     Bundle savedInstanceState) { 
    View view = inflater.inflate(R.layout.activity_first,container, false); 

    invitesGridView = (GridView)view.findViewById(R.id.invitesGridView); 

      return view; 
} 


final inviteListAdapter adapter = new inviteListAdapter(this,inviteFriendList); 
    invitesGridView.setAdapter(adapter); 
    adapter.notifyDataSetChanged(); 
+1

вы уверены Вызывается 'setAdapter'? когда вы называете этот метод? –

+0

Вы также указали «parent» как root и 'false', означает, что вы предоставляете родителя и говорите ему, чтобы он не принимал его как родителя? используйте '.inflate (R.layout.invite_adapter, null);' (нет корня, поэтому он будет использовать xml root как root) И, конечно, установите свой адаптер внутри 'onCreateView', так как именно там вы создаете представление. – Darpan

ответ

1
public View onCreateView (
    LayoutInflater inflater, 
    ViewGroup container, 
    Bundle savedInstanceState) { 
    View view = inflater.inflate(R.layout.activity_first,container, false); 

invitesGridView = (GridView)view.findViewById(R.id.invitesGridView); 
final inviteListAdapter adapter = new inviteListAdapter(this,inviteFriendList); 
invitesGridView.setAdapter(adapter); 
adapter.notifyDataSetChanged(); 

     return view; 
} 

Call setAdapter inside onCreateView

+0

Является ли он по-прежнему работать, если я пропускаю приглашение FriendList null? потому что я получаю данные в нем после onCreateView(), поэтому я вызываю setAdapter из onCreateView. – Keyul

+0

Нет. Это не сработает. Отправьте свой полный код. в каком методе вы вызываете setAdapter. –

1

Здесь вы должны использовать статический метод класса контекста. Мол, изменить context к Context.LAYOUT_INFLATER_SERVICE

LayoutInflater inflater = (LayoutInflater) context 
     .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
0

Сво не хорошая практика, чтобы создать inflater объект в getView() методе Вместо создать в конструкторе с помощью LayoutInflater.from(context);

Эта ссылка поможет вам How to use ArrayAdapter<myClass>

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