简体   繁体   中英

Switching between activities using different recycler views from two activities

I have two activities which are MainActivity and AnotherActivity and each activity has their own recyclerview. What I want to achieve is that if I'm in MainActivity and I click a recyclerview cell, then I should go to AnotherActivity and vice versa. The problem I have is that I don't know how to tell what activity is currently running so that I can manipulate it in if condition wherein if the activity running is MainActivity then I should redirect to AnotherActivity.

MainActivity.java

public class MainActivity extends AppCompatActivity {

RecyclerView recyclerView;
String[] list = {"COLLECTIONS", "NOW PLAYING", "ADD PLAYLIST", "LOVE SONGS"};
public int activityNum = 0;

public final static String TAG = MainActivity.class.getSimpleName();

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

    recyclerView= (RecyclerView) findViewById(R.id.my_recycler_view);
    RecyclerAdapter adapter=new RecyclerAdapter("main", list, list, MainActivity.this);
    recyclerView.setAdapter(adapter);
    recyclerView.setHasFixedSize(true);
    recyclerView.setLayoutManager(new LinearLayoutManager(MainActivity.this));

    Log.i(TAG, TAG);
  }
}

AnotherActivity.java

public class AnotherActvity extends AppCompatActivity {

RecyclerView recyclerView;
String[] list = {"Iridescent", "Bohemian Rhapsody", "November Rain", "I Love You"};
public int activityNum = 1;

public final static String TAG = MainActivity.class.getSimpleName();

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

    recyclerView= (RecyclerView) findViewById(R.id.my_recycler_view);
    RecyclerAdapter adapter=new RecyclerAdapter("another", list, list, AnotherActvity.this);
    recyclerView.setAdapter(adapter);
    recyclerView.setHasFixedSize(true);
    recyclerView.setLayoutManager(new LinearLayoutManager(AnotherActvity.this));

    Log.i(TAG, "AnotherActvity");
  }
}

RecyclerAdapter.java

public class RecyclerAdapter extends RecyclerView.Adapter<RecyclerViewHolder> {

LayoutInflater inflater;
String page;
String[] menu_list;
String[] song_title;
int returnVar = 0;

public RecyclerAdapter(String page, String[] menu_list, String[] menu_icons, Context context) {
    inflater= LayoutInflater.from(context);
    this.menu_list = menu_list;
    this.page = page;
}

public RecyclerAdapter(String page, String[] song_title, String[] song_artist, String[] song_duration, Context context) {
    inflater=LayoutInflater.from(context);
    this.song_title = song_title;
}

@Override
public RecyclerViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {

    View view = null;
    RecyclerViewHolder viewHolder = null;

    if(page == "main") {
        view = inflater.inflate(R.layout.main_list, parent, false);
        viewHolder = new RecyclerViewHolder(view);
    }else if(page == "another"){
        view = inflater.inflate(R.layout.another_list, parent, false);
        viewHolder = new RecyclerViewHolder(view);
    }
    return viewHolder;
}

@Override
public void onBindViewHolder(RecyclerViewHolder holder, int position) {
    if(page == "main") {
        holder.item.setText(menu_list[position]);
        holder.imageView.setTag(holder);
    }else if(page == "another") {
        holder.item.setText(menu_list[position]);
        holder.imageView.setTag(holder);
    }
}

public void setLength(int returnVar) {
    this.returnVar = returnVar;
}

public int getLength() {
    return this.returnVar;
}

@Override
public int getItemCount() {
    if(page == "main") {
        setLength(menu_list.length);
    }else if(page == "another") {
        setLength(menu_list.length);
    }
    return getLength();
  }
}

RecyclerViewHolder.java

public class RecyclerViewHolder extends RecyclerView.ViewHolder {

TextView item;
ImageView imageView;
boolean lala = false;

public RecyclerViewHolder(final View itemView) {
    super(itemView);

    item = (TextView) itemView.findViewById(R.id.list_title);
    imageView = (ImageView) itemView.findViewById(R.id.list_avatar);

    itemView.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {


        }
    });
  }
}

As in onCreateViewHolder method inflating layout according to page String, so just add one more parameter to RecyclerViewHolder of String type and pass page :

public RecyclerViewHolder(final View itemView,final String page) {
    super(itemView);
    ...
    @Override
        public void onClick(View v) {
            if(page.equals("main")){
              // start MainActivity Activity here 
             }else{
              // start AnotherActvity Activity here
             }

        }
}

And pass page to RecyclerViewHolder constructor when creating object in onCreateViewHolder :

viewHolder = new RecyclerViewHolder(view,page);

NOTE: Use String.equals or equalsIgnoreCase instead of == for comparing String values currently == is used in RecyclerViewHolder and onBindViewHolder for comparing Strings

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM