我正在使用回收站视图,并根据用户的要求以编程方式添加项目。当我在我的设备上安装应用程序时,会显示以编程方式添加的项目。但是当我杀死应用程序并再次打开它时,以编程方式添加的项目不会显示。我保留了一个最初包含3个项目的项目的arraylist。应用程序被杀后,不会保留对llistt的任何进一步添加。 任何帮助表示赞赏。请帮忙!
我正在附加包含recycler视图的适配器类和片段类。
public class MyAdapter extends RecyclerView.Adapter<MyAdapter.MyViewHolder> {
List<MyItem> items;
private LayoutInflater inflater;
private Context context;
public MyAdapter(Context context, List<MyItem> items){
this.items = items;
this.context = context;
inflater = LayoutInflater.from(context);
}
@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = inflater.inflate(R.layout.item_my_list, parent, false);
MyViewHolder myHolder= new MyViewHolder(view);
return myHolder;
}
@Override
public void onBindViewHolder(MyAdapter.MyViewHolder holder, int position) {
MyItem item = items.get(position);
holder.name.setText(item.get_Name());
holder.number.setText(item.get_Number());
}
@Override
public int getItemCount() {
return items.size();
}
public void delete(int position) {
items.remove(position);
notifyItemRemoved(position);
}
public void add(MyItem item, int position){
items.add(position, item);
notifyItemInserted(position);
notifyItemRangeChanged(0, getItemCount());
}
class MyViewHolder extends RecyclerView.ViewHolder{
TextView number, name;
public MyViewHolder(View itemView){
super(itemView);
number =(TextView) itemView.findViewById(R.id.number);
name = (TextView) itemView.findViewById(R.id.name);
}
}
}
这里是我的片段类:
public class RecyclerViewFragment extends Fragment {
RecyclerView myRecyclerView;
RecyclerView.Adapter adapter;
TextView addItem;
TextView nameText, numberText;
private static List<MyItem> items;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_recycler_view, container, false);
myRecyclerView = (RecyclerView) view.findViewById(R.id.my_list);
adapter = new MyAdapter(getActivity(), getData());
Log.i("DATA ITEMS", getData().get(0).get_contactName());
Log.i("DATA ITEMS", getData().get(0).get_contactName());
Log.i("DATA ITEMS", getData().get(0).get_contactName());
addItem = (TextView) view.findViewById(R.id.add_new_item);
myRecyclerView.setAdapter(adapter);
myRecyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));
myRecyclerView.addOnItemTouchListener(new RecyclerViewTouchListener(getActivity(), myRecyclerView, new ClickListener() {
@Override
public void onClick(View view, int position) {
Log.i("MY INFO", "item of recycler view clicked" + position);
}
@Override
public void onLongClick(View view, int position) {
}
}));
addItem.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
addNewItem();
}
});
return view;
}
public static List<MyItem> getData(){
items = new ArrayList<>();
items.add(new MyItem("7341973", "xyzabc"));
items.add(new MyItem("86218", "qwerty"));
items.add(new MyItem("178581", "bnmlkjh"));
return items;
}
public void addNewItem(){
LayoutInflater li = LayoutInflater.from(this.getActivity());
View view = li.inflate(R.layout.dialog_add_item, null);
AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(this.getActivity());
alertDialogBuilder.setView(view);
nameText = (TextView) view.findViewById(R.id.new_name);
numberText = (TextView) view.findViewById(R.id.new_number);
alertDialogBuilder
.setCancelable(false)
.setNegativeButton("Cancel",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
dialog.cancel();
}
})
.setPositiveButton("Add", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
if(numberText.getText() != null && nameText.getText() != null){
MyItem item = new MyItem(numberText.getText().toString(), nameText.getText().toString());
((MyAdapter) adapter).add(item, 0);
}
else
Toast.makeText(getActivity(), "Add name and number", Toast.LENGTH_SHORT).show();
}
});
AlertDialog dialog = alertDialogBuilder.create();
dialog.show();
}
public interface ClickListener{
void onClick(View view, int position);
void onLongClick(View view, int position);
}
static class RecyclerViewTouchListener implements RecyclerView.OnItemTouchListener{
private GestureDetector detector;
private ClickListener listener;
public RecyclerViewTouchListener (Context context, final RecyclerView recyclerView, final ClickListener clickListener){
this.listener = clickListener;
detector = new GestureDetector(context, new GestureDetector.SimpleOnGestureListener(){
@Override
public boolean onSingleTapUp(MotionEvent e) {
return true;
}
@Override
public void onLongPress(MotionEvent e) {
View child = recyclerView.findChildViewUnder(e.getX(), e.getY());
if (child != null && clickListener != null) {
clickListener.onLongClick(child, recyclerView.getChildAdapterPosition(child));
}
}
});
}
@Override
public boolean onInterceptTouchEvent(RecyclerView rv, MotionEvent e) {
View child = rv.findChildViewUnder(e.getX(), e.getY());
if (child != null && listener != null && detector.onTouchEvent(e)) {
listener.onClick(child, rv.getChildAdapterPosition(child));
}
return false;
}
@Override
public void onTouchEvent(RecyclerView rv, MotionEvent e) {
}
@Override
public void onRequestDisallowInterceptTouchEvent(boolean disallowIntercept) {
}
}
}