簡體   English   中英

使用來自兩個活動的不同回收者視圖在活動之間切換

[英]Switching between activities using different recycler views from two activities

我有兩個活動,分別是MainActivity和AnotherActivity,每個活動都有自己的recyclerview。 我想要實現的是,如果我處於MainActivity中,然后單擊一個recyclerview單元格,那么我應該轉到AnotherActivity,反之亦然。 我的問題是,我不知道如何判斷當前正在運行的活動,因此我可以在以下情況下對其進行操作:如果正在運行的活動是MainActivity,則應重定向到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) {


        }
    });
  }
}

就像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
             }

        }
}

並在onCreateViewHolder創建對象時將page傳遞給RecyclerViewHolder構造函數:

viewHolder = new RecyclerViewHolder(view,page);

注意:使用String.equalsequalsIgnoreCase代替==來比較字符串值當前==RecyclerViewHolderonBindViewHolder用於比較字符串

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM