2016-04-27 76 views
0

我正在做一个RecyclerView的例子。问题是,当我在列表中添加第一个项目时,它在recyclerview上正确显示项目,但我添加的下一个项目未显示在回收视图中。回收站查看不刷新

请帮帮我。

适配器代码:

public class PersonAdapter extends RecyclerView.Adapter<PersonAdapter.PersonViewHolder> { 
private ArrayList<Person> mData; 
LayoutInflater inflater; 

public PersonAdapter() { 
} 

public PersonAdapter(Context context, ArrayList<Person> data) { 
    inflater = LayoutInflater.from(context); 
    update(data); 
} 

public void update(ArrayList<Person> data) { 
    mData = data; 
    notifyDataSetChanged(); 
} 

@Override 
public PersonViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
    View view = inflater.inflate(R.layout.custom_row, parent, false); 
    PersonViewHolder holder = new PersonViewHolder(view); 
    return holder; 
} 

@Override 
public void onBindViewHolder(PersonViewHolder holder, int position) { 
    Person person = mData.get(position); 

    holder.ivImagen.setImageResource(R.drawable.ic_action_android); 
    holder.tvNombre.setText(person.getName()); 
    holder.tvApellido.setText(person.getLast_name()); 
} 

@Override 
public int getItemCount() { 
    return mData.size(); 
} 

public static class PersonViewHolder extends RecyclerView.ViewHolder { 
    ImageView ivImagen; 
    TextView tvNombre; 
    TextView tvApellido; 

    public PersonViewHolder(View itemView) { 
     super(itemView); 
     ivImagen = (ImageView) itemView.findViewById(R.id.cr_iv_imagen); 
     tvNombre = (TextView) itemView.findViewById(R.id.cr_tv_name); 
     tvApellido = (TextView) itemView.findViewById(R.id.cr_tv_last_name); 
    } 
}} 

主要活动代码是:

public class MainActivity extends AppCompatActivity implements View.OnClickListener { 
ArrayList<Person> persons = new ArrayList<>(); 
EditText et_name; 
EditText et_last_name; 
RecyclerView rv_names; 
PersonAdapter adapter; 
Button btAgregar; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    et_name = (EditText) findViewById(R.id.tv_name); 
    et_last_name = (EditText) findViewById(R.id.tv_last_name); 
    btAgregar = (Button) findViewById(R.id.bt_agregar); 
    rv_names = (RecyclerView) findViewById(R.id.rv_nombres); 

    LinearLayoutManager manager = new LinearLayoutManager(this); 
    rv_names.setLayoutManager(manager); 
    adapter = new PersonAdapter(this, persons); 
    rv_names.setAdapter(adapter); 

    btAgregar.setOnClickListener(this); 
} 

@Override 
public void onClick(View v) { 
    Person person = new Person(et_name.getText().toString(), et_last_name.getText().toString()); 
    persons.add(person); 

    Toast.makeText(this, "Items: " + String.valueOf(persons.size()), Toast.LENGTH_SHORT).show(); 
} } 
+1

添加XML代码也。有时发生在设置'RecycleView'高度'wrap_content' –

+0

@Zahidul在上次支持包更新中未解决此问题? – yennsarah

回答

1

试试这个代码onClick功能

@Override 
public void onClick(View v) { 
Person person = new Person(et_name.getText().toString(), et_last_name.getText().toString()); 
persons.add(person); 

adapter.update(persons); 

Toast.makeText(this, "Items: " + String.valueOf(persons.size()), Toast.LENGTH_SHORT).show(); 
} 

UPDATE:

在适配器代码,请尝试以下变化..

public void update(ArrayList<Person> data) { 
mData.clear(); 
mData.addAll(data) 
notifyDataSetChanged(); 
} 
+0

Hello Fabin我添加了行:adapter.update(个人);但不工作:(我添加第一个项目后没有显示在Recycler视图:( – Hugo

+0

@Hugo我已经更新了答案。 –

+0

感谢Fabin。 ! – Hugo

1

在onclick要添加一个人,但你是不是通过调用传递更新列表到适配器适配器的更新方法。这可能是原因吗?

+0

正是这个原因 –

+0

你好杰拉尔多。我在添加项目后在onClick中添加了更新方法,但不工作:(onClick代码现在是:Person person = new Person(et_name.getText()。toString(),et_last_name.getText()。toString()); persons.add(person); adapter.update(persons); Toast.makeText(this,“Items:”+ String.valueOf(persons.size()),Toast.LENGTH_SHORT).show(); – Hugo