Java 是否从片段更新RecycleView?
我正在尝试将对象添加到此RecycleView。当我将对象添加到初始ArrayList时,它们都会显示出来。但是,当我尝试添加一个对象并从HomeFragment调用notifyDataSetChanged时,UI上什么也没有发生 HomeFragment.java HomeAdapter.java 去掉这一行: mRecyclerView.setHasFixedSizetrue 固定大小是指项目数量,而不是布局大小Java 是否从片段更新RecycleView?,java,android,android-recyclerview,Java,Android,Android Recyclerview,我正在尝试将对象添加到此RecycleView。当我将对象添加到初始ArrayList时,它们都会显示出来。但是,当我尝试添加一个对象并从HomeFragment调用notifyDataSetChanged时,UI上什么也没有发生 HomeFragment.java HomeAdapter.java 去掉这一行: mRecyclerView.setHasFixedSizetrue 固定大小是指项目数量,而不是布局大小 public class HomeFragment extends Fragm
public class HomeFragment extends Fragment {
View myView;
private RecyclerView mRecyclerView;
private HomeAdapter mAdapter;
private RecyclerView.LayoutManager mLayoutManager;
private ArrayList<Note> myNotes;
private Activity activity;
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
myView = inflater.inflate(R.layout.first_layout, container, false);
mRecyclerView = (RecyclerView) myView.findViewById(R.id.list12313);
//linear layout manager
mLayoutManager = new LinearLayoutManager(activity);
mRecyclerView.setHasFixedSize(true);
mRecyclerView.setLayoutManager(mLayoutManager);
mRecyclerView.setItemAnimator(new DefaultItemAnimator());
//adapter
myNotes = new ArrayList<Note>();
myNotes.add(new Note("Welcome to WITS Mobile", "Logged in as: " + LoginActivity.witsName));
myNotes.add(new Note("Version 0.1 ALPHA", "- Early Internal Alpha"));
//myNotes.add(new Note());
mAdapter = new HomeAdapter(myNotes, activity);
mRecyclerView.setAdapter(new SlideInBottomAnimationAdapter(mAdapter));
setHasOptionsMenu(true);
return myView;
}
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
inflater.inflate(R.menu.first, menu);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch(item.getItemId())
{
case R.id.action_add:
addItem();
return true;
case R.id.action_CLR:
clear();
return true;
default:
return super.onOptionsItemSelected(item);
}
}
public void addItem()
{
Note e = new Note("New Title", "New Body");
mAdapter.addItem(e);
}
public void clear()
{
mAdapter.clear();
}
}
public class HomeAdapter extends RecyclerView.Adapter<HomeAdapter.ViewHolder>
{
private ArrayList<Note> mNotes;
private int lastPosition = -1;
private Context context;
public HomeAdapter(ArrayList<Note> list, Context context)
{
this.mNotes = list;
this.context = context;
}
public void clear()
{
mNotes.clear();
notifyDataSetChanged();
}
public void addItem(Note n)
{
System.out.println("add");
mNotes.add(n);
notifyDataSetChanged();
}
public static class ViewHolder extends RecyclerView.ViewHolder
{
public View view;
public ViewHolder(View itemView) {
super(itemView);
view = itemView;
}
}
public HomeAdapter.ViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
//create new view
View v = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.row_card, viewGroup, false);
ViewHolder vh = new ViewHolder(v);
return vh;
}
public TextView title;
public TextView subtext;
@Override
public void onBindViewHolder(HomeAdapter.ViewHolder viewHolder, int i)
{
//Replace contents of a view, called by layout manager
title = (TextView) viewHolder.view.findViewById(R.id.title);
subtext = (TextView) viewHolder.view.findViewById(R.id.subtext);
title.setText(mNotes.get(i).getTitle());
subtext.setText(mNotes.get(i).getBody());
setAnimation(viewHolder.view, i);
}
private void setAnimation(View viewToAnimate, int position)
{
// If the bound view wasn't previously displayed on screen, it's animated
if (position > lastPosition)
{
Animation animation = AnimationUtils.loadAnimation(context, android.R.anim.slide_in_left);
viewToAnimate.startAnimation(animation);
lastPosition = position;
}
}
@Override
public int getItemCount() {
return mNotes.size();
}
}