2017-08-25 273 views
-1

请帮我一下,我已经创建了一个简单的recyclerview,但我没有得到输出在屏幕上,它是空白 这是我的适配器类,我一直在试图调试这个整整一天没有成功,同样,也没有错误,而执行Recyclerview没有填充,空白屏幕

public class ContactAdapter extends RecyclerView.Adapter<ContactAdapter.ViewHolder> 
{ 
    private Activity context; 
    private LayoutInflater mLayoutInflater; 
    private List<Contact> contacts; 
    public ContactAdapter(Activity context) 
    { 
     this.context=context; 
     mLayoutInflater=(LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     contacts = new ArrayList<>(); 
    } 
    @Override 
    public ContactAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
     View view = mLayoutInflater.inflate(R.layout.contact,parent,false); 
     return new ViewHolder(view); 
    } 

    @Override 
    public void onBindViewHolder(ContactAdapter.ViewHolder holder, int position) { 
     Contact contact = contacts.get(position); 
     holder.name.setText(contact.getName()); 
     holder.email.setText(contact.getEmail()); 
    } 

    @Override 
    public int getItemCount() { 
     return contacts.size(); 
    } 
    static class ViewHolder extends RecyclerView.ViewHolder 
    { 
     TextView name,email; 
     ViewHolder(View itemView) 
     { 
      super(itemView); 
      name= (TextView)itemView.findViewById(R.id.name); 
      email=(TextView)itemView.findViewById(R.id.email); 
     } 
    } 
    } 

这是我的mainActivity类别

public class MainActivity extends AppCompatActivity { 
RecyclerView recyclerView; 
ContactAdapter adapter; 
List<Contact> contacts = new ArrayList<>(); 

@Override 
protected void onCreate(Bundle savedInstanceState) { 

super.onCreate(savedInstanceState); 
setContentView(R.layout.activity_main); 
recyclerView= (RecyclerView) findViewById(R.id.recyclerView); 
recyclerView.setLayoutManager(new LinearLayoutManager(this)); 
adapter=new ContactAdapter(this); 
Contact c1=new Contact("potato","[email protected]"); 

adapter.setHasStableIds(true); 
recyclerView.setAdapter(adapter); 
contacts.add(c1); 
adapter.notifyDataSetChanged(); 
} 
} 
+1

设置适配器后,您正在添加数据试图在完全添加数据后尝试设置适配器,或者在添加联系人(即添加contacts.add(c1)后调用notifiyDataSetChanged(); – Killer

+0

之后行contacts.add(c1)我已添加adapter.notifyDataSetChanged();但仍然没有结果 –

回答

0

你是适配器

public class ContactAdapter extends RecyclerView.Adapter<ContactAdapter.ViewHolder> 
{ 
    private Activity context; 
    private LayoutInflater mLayoutInflater; 
    private List<Contact> contacts; 
    public ContactAdapter(Activity context,List<Contact> _list) 
    { 
     this.context=context; 
     this.contacts=_list; 
     mLayoutInflater=(LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     contacts = new ArrayList<>(); 
    } 

    public void setDataChange(List<Contact> asList) { 
     this.contacts = asList; 
     //now, tell the adapter about the update 
     notifyDataSetChanged(); 
    } 

    @Override 
    public ContactAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
     View view = mLayoutInflater.inflate(R.layout.contact,parent,false); 
     return new ViewHolder(view); 
    } 

    @Override 
    public void onBindViewHolder(ContactAdapter.ViewHolder holder, int position) { 
     Contact contact = contacts.get(position); 
     holder.name.setText(contact.getName()); 
     holder.email.setText(contact.getEmail()); 
    } 

    @Override 
    public int getItemCount() { 
     return contacts.size(); 
    } 
    static class ViewHolder extends RecyclerView.ViewHolder 
    { 
     TextView name,email; 
     ViewHolder(View itemView) 
     { 
      super(itemView); 
      name= (TextView)itemView.findViewById(R.id.name); 
      email=(TextView)itemView.findViewById(R.id.email); 
     } 
    } 
    } 

Activity

public class MainActivity extends AppCompatActivity 
{ 
RecyclerView recyclerView; 
ContactAdapter adapter; 
List<Contact> contacts = new ArrayList<>(); 

@Override 
protected void onCreate(Bundle savedInstanceState) 
{ 

    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    recyclerView= (RecyclerView) findViewById(R.id.recyclerView); 
    recyclerView.setLayoutManager(new LinearLayoutManager(this)); 

    Contact c1=new Contact("potato","[email protected]"); 
    contacts.add(c1); 
    adapter=new ContactAdapter(this,contacts); 
    recyclerView.setAdapter(adapter); 
} 
} 
0

里面你Adapter你必须创建一个补充方法:

public void add(Contact c1) { 
    chatModelList.add(c1); 
    notifyItemInserted(contacts.size() - 1); 
} 

另一种方式:

List<Contact> result = getResult(); 
recyclerView.setLayoutManager(new LinearLayoutManager(getContext())); 
adapter = new ContactAdapter(this, result); 
recyclerView.setAdapter(adapter); 

private List<Contact> getResult() { 
    List<Contact> contactList = new ArrayList<>(); 
    contactList.add(new Contact("A","B")); 
    return contactList; 
} 

现在,在您的适配器类:

private Context context; 
private List<Contact> contact = new ArrayList<>(); 


public ContactAdapter(Context context, List<Contact> contact) { 
    this.context = context; 
    this.contact = contact; 
} 
+0

我将联系人对象添加到列表中作为列表 contacts = new ArrayList <>();然后创建联系人对象后,我将它添加到列表contacts.add(c1); –

+0

现在有效,非常感谢。现在我知道它为什么不起作用。你是一个拯救生命的人。 –

+0

你可以知道这个:https://stackoverflow.com/help/someone-answers:D –

0

您的主要联系人列表中,但您没有将这些联系人添加到您的适配器。 (在你的情况下,适配器列表总是空的)。

在适配器中创建一个方法,将联系人设置到适配器中。

void setContacts(List<Contact> contacts) { 
    this.contacts = contacts; 
    notifiyDataSetChanged(); 
} 

void addContacts(Contact contact) { 
    this.contacts.add(contact); 
    notifyItemInserted(getItemCount()-1); 
} 

然后在你的主通话setContacts如果你想一次添加多个联系人,或使用addContacts添加联系人一次一个。