简体   繁体   English

使用来自两个活动的不同回收者视图在活动之间切换

[英]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. 我有两个活动,分别是MainActivity和AnotherActivity,每个活动都有自己的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. 我想要实现的是,如果我处于MainActivity中,然后单击一个recyclerview单元格,那么我应该转到AnotherActivity,反之亦然。 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,则应重定向到AnotherActivity。

MainActivity.java 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 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 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 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 : 就像onCreateViewHolder方法根据page String扩大布局一样,因此只需向String类型的RecyclerViewHolder添加一个参数并传递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 : 并在onCreateViewHolder创建对象时将page传递给RecyclerViewHolder构造函数:

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 注意:使用String.equalsequalsIgnoreCase代替==来比较字符串值当前==RecyclerViewHolderonBindViewHolder用于比较字符串

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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