有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

安卓如何从另一个活动(按钮)JAVA更新recyclerview

我正在开发一个notes应用程序,在按下一个按钮后,我想从另一个活动中更新我的交错RecycleView。由于某些原因,我无法使用更新recycleviewadapter的不同选项。谢谢你抽出时间

这是RecViewAdapter


     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 ();


            }

            

        });

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



    public void checkFunction (View view) {

        Log.i("this is INDEX INTENT", String.valueOf(indexPosition));
    }

    public void right_function (View view) {
        Log.i("Check", "CHECK ICON PRESSED");
        titleText = edtTxt_header.getText().toString();
        noteText = textInputEditText.getText().toString();


        if (titleText.equals(t1) && noteText.equals(n1)) {

            finish();


        }

        else if (titleText.equals(t1) && !noteText.equals(n1)){
             MainActivity.arrNote.set(indexPosition, noteText);

StaggeredRecycleViewAdapter.notifyDataSetChanged() <------- HERE IS MY PROBLEM,CANT RUN notifydatachanger
            finish();
        }

        else if (noteText.equals(n1) && titleText!= t1) {
            MainActivity.arrTitle.set(indexPosition, titleText);
            
            finish();
        }

        else  {
            MainActivity.arrTitle.add(titleText);
            MainActivity.arrNote.add(noteText);


            finish();
        }



    }


    /**
     * BACK BUTTON
     * @param view
     */
    public void left_function (View view) {

        //Add 'are you sure dialog here`


        finish();
    }

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

        getSupportActionBar().hide();
        leftIcon = findViewById(R.id.left_icon);
        rightIcon = findViewById(R.id.right_icon);
        edtTxt_header = (EditText)findViewById(R.id.edtTxt_header);
        textInputEditText = (TextInputEditText) findViewById(R.id.textInputEditText);
        btn_check = findViewById(R.id.btn_check);



        Intent editIntent = getIntent();


        t1 =  editIntent.getStringExtra("headerText");
        n1  = editIntent.getStringExtra("noteText");
        indexPosition =  editIntent.getIntExtra("arrIndex", 0);

        edtTxt_header.setText(t1);
        textInputEditText.setText(n1);


共 (1) 个答案

  1. # 1 楼答案

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

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

    希望这些想法有帮助