如何从另一个活动按钮JAVA更新recyclerview

问题描述

我正在构建一个笔记应用程序并卡在我想在按下按钮后从另一个活动更新我的 StaggeredRecycleView 的阶段。由于某种原因,我无法使用更新 recycleviewadapter 的不同选项。谢谢你的时间!

这里是 RecViewAdapter

df = pd.read_csv('overs.txt',header=None)
print(df)

这里是主活动


     public StaggeredRecycleViewAdapter(Context mContext,ArrayList<String> arrTitle,ArrayList<String> arrNote) {
        this.arrTitle = arrTitle;
        this.arrNote = arrNote;
        this.mContext = mContext;



    }

    @NonNull
    @Override
    public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent,int viewType) {
        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.layout_grid_item,parent,false);


        return new ViewHolder(view);
    }

    @Override
    public void onBindViewHolder(@NonNull ViewHolder holder,int position) {

        Log.d(TAG,"onBindViewHolder: called");

        RequestOptions requestOptions = new RequestOptions().placeholder(R.drawable.ic_launcher_background);

        //GET TEXT HÄÄÄR

        holder.txtTitle.setText(arrTitle.get(position));
        holder.txtNote.setText(arrNote.get(position));

        // DET HÄR FÖR ATT ÖPPNA TEXT FRÅN STAGGERED VIEW

        holder.txtNote.setonClickListener(new View.OnClickListener() {
            @Override


            public void onClick(View v) {
                Log.d(TAG,"onClick: clicked on note " + arrNote.get(position));


                String rvTitleText;
                String rvNoteText;
                rvTitleText = MainActivity.arrTitle.get(position).toString();
                rvNoteText = MainActivity.arrNote.get(position).toString();


                Intent editIntent = new Intent(mContext,edTxt_activity.class);
                editIntent.putExtra("headerText",rvTitleText.toString());
                editIntent.putExtra("noteText",rvNoteText.toString());
                editIntent.putExtra("arrIndex",position);
                mContext.startActivity(editIntent);



            }
        });


        holder.txtTitle.setonClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Log.d(TAG,"onClick: clicked on title " + arrTitle.get(position));


            }
        });


    }

这是我按下“右功能”按钮后要更新的活动



    public class MainActivity extends AppCompatActivity {
    private static final String TAG = "MainActivity";
    private static final int NUM_COLUMNS = 2;

     static ArrayList<String> arrTitle = new ArrayList<>();
     static ArrayList<String> arrNote = new ArrayList<>();

    FloatingActionButton btn_add;



    public void StartEdTxtActivity (){
        Intent editIntent = new Intent(getApplicationContext(),edTxt_activity.class);
        startActivity(editIntent);
    }



private void addSampleText (){
    Log.d(TAG,"onCreate: test test of mainactivity text");


    arrTitle.add("My first note");
    arrNote.add("Lorem ipsum dolor sit amet,consectetur adipisicing elit," +
            "sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. " +
            "Ut enim ad minim veniam,quis nostrud");

}

private void initRecyclerView () {
    System.out.println("init staggered recycleview");
    RecyclerView recyclerView = findViewById(R.id.recyclerView);
    StaggeredRecycleViewAdapter staggeredRecycleViewAdapter = new StaggeredRecycleViewAdapter(this,arrTitle,arrNote);
    StaggeredGridLayoutManager staggeredGridLayoutManager = new StaggeredGridLayoutManager(NUM_COLUMNS,linearlayoutmanager.VERTICAL);
    recyclerView.setLayoutManager(staggeredGridLayoutManager);
    recyclerView.setAdapter(staggeredRecycleViewAdapter);
}

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

         btn_add = findViewById(R.id.btn_add);

        initRecyclerView();
         addSampleText();



        btn_add.setonClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Log.i("Button","add button is pressed");

                StartEdTxtActivity ();


            }

            

        });

解决方法

您有一些选择(基于您的设计模型):

  1. 当您运行第二个活动时,第一个活动会暂停, 当您关闭第二个活动并返回到第一个活动时,然后 onResume 函数被调用,然后你可以更新 RecyclerView on onResume 函数。
  2. 如果您使用 startActivityForResults 启动第二个活动, 然后在关闭第二个活动后,您将被定向到 第一个活动中的 onActivityResult 函数。你甚至可以 将一些数据从第二个活动传回第一个活动,然后 更新 RecyclerView。
  3. 如果您希望 RecyclerView 在两个屏幕都显示时更新 可见,我建议使用片段。一个片段包含 RecyclerView 和另一个包含第二个视图的片段。然后 您可以在第一个片段中创建一个接口并实现一个 第二个片段上的界面。使用这种方式,您可以更新 实时查看 RecyclerView。
  4. 还有一些其他想法,例如使用 Firebase 更新和检索数据。使用 Firebase,您可以更新第二个屏幕上的数据,这些数据将被第一个屏幕自动获取。

希望这些想法对您有所帮助。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...