【问题标题】:Adding item dynamically to recyclerview将项目动态添加到recyclerview
【发布时间】:2019-10-05 02:38:23
【问题描述】:

我正在构建一个记事本应用程序。我正在尝试在用户保存新笔记后立即向recyclerview 添加另一个项目。

 public class NotePad extends AppCompatActivity {

    public static final String EXTRA_MESSAGE = "key";

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

      final FloatingActionButton button = 
      (FloatingActionButton)findViewById(R.id.save_button);

      button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
           SaveData();
        }
      });
   }

   // To Send Note Title to MainActivity
   public void SendData() {
     EditText editText = findViewById(R.id.textView3);

     final String str = editText.getText().toString();
     Log.d("Check","str:"+str);
     Intent intent = new Intent(NotePad.this,MainActivity.class);
     intent.putExtra(EXTRA_MESSAGE, str);
     startActivity(intent);
   }



   // To Save Note Content
   public void SaveData() {
     FileOutputStream outputStream;

     try {
        EditText editText = findViewById(R.id.textView3);
        final String str = editText.getText().toString();
        String content = findViewById(R.id.textView).toString();
        Log.d("Test","inside try block");
        outputStream = openFileOutput(str, Context.MODE_PRIVATE);
        outputStream.write(content.getBytes());

        Log.d("Test","save done");
        SendData();

    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
  }

我正在保存一个便笺并将要在recyclerview 行中显示的标题(str)发送到MainActivity,如上所示。

  public class MainActivity extends AppCompatActivity {
    private RecyclerView recyclerView;
    private RecyclerView.Adapter mAdapter;
    private RecyclerView.LayoutManager layoutManager;
    ArrayList<String> notes = new ArrayList<String>();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);

      setContentView(R.layout.activity_main);

      Intent intent = getIntent();
      String title = intent.getStringExtra(NotePad.EXTRA_MESSAGE);
      Log.d("Check","title added"+title);
      notes.add(title);
      BuildRecyclerView();
    }

    public void BuildRecyclerView() {
      recyclerView = (RecyclerView)findViewById(R.id.recycle_list);

      layoutManager = new LinearLayoutManager(this);
      recyclerView.setLayoutManager(layoutManager);
      mAdapter = new MyAdapter(notes);
      recyclerView.setAdapter(mAdapter);
    }

但是每当我添加新注释时,它都会覆盖recyclerview 中的第一个条目,而不是占用recyclerview 的下一行。这是我的适配器代码:

    public class MyAdapter extends 
    RecyclerView.Adapter<MyAdapter.MyViewHolder> {

      ArrayList<String> Notes_list = new ArrayList<String>();

      public MyAdapter(ArrayList<String> notes) {
        Notes_list = notes;
      }

      @NonNull
      @Override
      public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int 
      viewType) {
        LayoutInflater inflater = LayoutInflater.from(parent.getContext());
        View view = inflater.inflate(R.layout.list_items,parent,false);
        return new MyViewHolder(view);
      }

      @Override
      public void onBindViewHolder(@NonNull MyViewHolder holder, int 
      position) {
        holder.mTextView.setText(Notes_list.get(position));
      }

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

      public class MyViewHolder extends RecyclerView.ViewHolder {
        TextView mTextView;
        public MyViewHolder(@NonNull View itemView) {
          super(itemView);
          mTextView = (TextView) itemView.findViewById(R.id.view_holder);
        }
      } 
   }

【问题讨论】:

  • 你的 addNote 方法在哪里?

标签: android android-recyclerview


【解决方案1】:

因为您将最后一个项目传递给 MainActivity 并使用传递的项目生成一个新的 RecyclerView。您必须将 notes 数组保留在第一堂课上,并有意地将整个数组传递给 MainActivity。

【讨论】:

  • 它不起作用。即使我发送整个数组列表。 arrayList 在 Note Activity 中被覆盖,当我第二次使用意图发送数据时,即使我发送整个 ArrayList 它也不会工作。我想我可以使用共享首选项来存储先前数组列表的数据,并在新数据到达主要活动时将其添加到数组列表中?
  • 你指定的错误也会同样存在于Note Activity中
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-31
  • 2011-11-15
  • 2012-08-27
  • 1970-01-01
相关资源
最近更新 更多