how to update RecyclerView element from OnActivity

2020-02-15 08:32发布

问题:

I m make NAME and EMAIL equal to the data from other activity in first activity. Whem i m using NAME and EMAIL for toast in onActivityResult it showing the result but beyond this method its not working beside i make NAME and EMAIL a global variable.

public class startActivity extends ActionBarActivity {


       String sell="sell";
    Toolbar mToolbar;
    //////drawable navbar
    LinearLayout mystore;
    int  REQUEST_CODE=10110;
    private static ViewPager mPager;
    private static int currentPage = 0;
    private static int NUM_PAGES = 0;
    LinearLayout buysell;



     int PROFILE = R.drawable.sellit;

    private Toolbar toolbar;  
                            // Declaring the    Toolbar Object

      RecyclerView mRecyclerView;                           // Declaring 
      RecyclerView.Adapter mAdapter;                        // Declaring Adapter 
      RecyclerView.LayoutManager mLayoutManager;            // Declaring Layout 
      DrawerLayout Drawer;                                  // Declaring 

    ActionBarDrawerToggle mDrawerToggle;
    /////
      String name,mail;
    String NAME;
    String EMAIL;
       protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_start);


      mystore=(LinearLayout)findViewById(R.id.mystore);
        mystore.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                startActivity(new Intent(startActivity.this,MybookStore.class));
            }
        });
        //toolbar
      init();

        buysell=(LinearLayout)findViewById(R.id.buysell);
        buysell.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                startActivity(new Intent(startActivity.this,buySecond.class));
            }
        });

        mToolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(mToolbar);
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);
        getSupportActionBar().setHomeButtonEnabled(true);

        getSupportActionBar().setTitle("MybookStore");




        mRecyclerView = (RecyclerView) findViewById(R.id.RecyclerView); 

        mRecyclerView.setHasFixedSize(true); 

        mAdapter = new MyAdapter(TITLES,ICONS,NAME,EMAIL,PROFILE);   

        // And passing the titles,icons,header view name, header view email,
        // and header view profile picture

        mRecyclerView.setAdapter(mAdapter);    
                           // Setting the adapter to RecyclerView
        //RecyclerItemClickListener//
                mLayoutManager = new LinearLayoutManager(this);   
                // Creating a layout Manager

        mRecyclerView.setLayoutManager(mLayoutManager);  
               // Setting the layout Manager

        mRecyclerView.addOnItemTouchListener(
                new RecyclerItemClickListener(startActivity.this, new 
     RecyclerItemClickListener.OnItemClickListener() {
                    @Override public void onItemClick(View view, int position) {
                        switch(position){
                            case 1:
                                startActivity(new    
      Intent(startActivity.this,publishNewBook.class));
                        }
                    }
                })
        );


        Drawer = (DrawerLayout) findViewById(R.id.DrawerLayout);  
      // Drawer object Assigned to the view
        mDrawerToggle = new
         ActionBar
       DrawerToggle(this,Drawer,toolbar,R.string.drawer_open,R.string.drawer_c
      lose){

            @Override
            public void onDrawerOpened(View drawerView) {
                super.onDrawerOpened(drawerView);
                // code here will execute once the drawer is opened( As I dont 
        want anything happened whe drawer is
                // open I am not going to put anything here)
            }

            @Override
            public void onDrawerClosed(View drawerView) {
                super.onDrawerClosed(drawerView);
                // Code here will execute once drawer is closed
            }



        }; // Drawer Toggle Object Made
        Drawer.setDrawerListener(mDrawerToggle); // Drawer Listener set to the
      Drawer toggle
                     // Finally we set the drawer toggle sync State
        mDrawerToggle.syncState();


    }




    public void login(View view){
    AlertDialog.Builder builder=new AlertDialog.Builder(this);
    builder.setMessage("Please Login To Publish Book ");
    builder.setCancelable(false);
    builder.setPositiveButton("OK", new DialogInterface.OnClickListener() {

        public void onClick(DialogInterface dialog, int which) {
            Intent i=new Intent(startActivity.this, userLogin.class);
            startActivityForResult(i,REQUEST_CODE);
          //  startActivity(new Intent(startActivity.this, userLogin.class));
        }
    });
    builder.setNegativeButton("CANCEL", new DialogInterface.OnClickListener() {

        public void onClick(DialogInterface dialog, int which) {
            dialog.cancel();
        }
    });
     AlertDialog alertDialog=builder.create();
    alertDialog.show();

     //startActivity(new Intent(startActivity.this,userLogin.class));

    }

    protected void onActivityResult(int requestCode, int resultCode, Intent 
    data) {
        super.onActivityResult(requestCode, resultCode, data);

     if(requestCode==REQUEST_CODE){
        if (resultCode ==110) {
            NAME=new String(data.getStringExtra("name1"));
            EMAIL=new String(data.getStringExtra("mail2"));
            Toast.makeText(getApplicationContext(), "Name " + NAME+" and mailId
      "+EMAIL+" get", Toast.LENGTH_LONG).show();

            //  mAdapter = new MyAdapter(TITLES,ICONS,NAME1,EMAIL1,PROFILE);

        }
   }
}

回答1:

do this

   //make a function updateAdapter() inside your adapter
   public void updateAdapter(/* gets params like TITLES,ICONS,NAME,EMAIL,PROFILE*/){

            // update adapter element like NAME, EMAIL e.t.c. here

            // then in order to refresh the views notify the RecyclerView
            notifyDataSetChanged();
   }

then modify the OnActivityResult method like so

   protected void onActivityResult(int requestCode, int resultCode, Intent 
   data) {
           super.onActivityResult(requestCode, resultCode, data); 

           if(requestCode==REQUEST_CODE){ 
              if (resultCode == RESULT_OK) { 
                NAME=new String(data.getStringExtra("name1")); 
                EMAIL=new String(data.getStringExtra("mail2")); 
                Toast.makeText(getApplicationContext(), "Name " + NAME+" and mailId 
                "+EMAIL+" get", Toast.LENGTH_LONG).show(); 

                //do this
                mAdapter.updateAdapter(TITLES,ICONS,NAME,EMAIL,PROFILE);

    } 
 } 


回答2:

The thing you are looking for Is passing data between activities. Firstly you should use fragments instead of activity, if you are still willing to use activities then it is answered here

How to send string from one activity to another?