我创建了RecyclerView
并添加了卡片。我想通过点击不同的卡片来打开不同的活动。
MainActivity
public class MainActivity extends AppCompatActivity {
RecyclerView mRecyclerView;
RecyclerView.LayoutManager mLayoutManager;
RecyclerView.Adapter mAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mRecyclerView = (RecyclerView)findViewById(R.id.recycler_view);
mRecyclerView.setHasFixedSize(true);
mLayoutManager = new LinearLayoutManager(this);
mRecyclerView.setLayoutManager(mLayoutManager);
mAdapter = new CardAdapter();
mRecyclerView.setAdapter(mAdapter); }
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
//noinspection SimplifiableIfStatement
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
}
CardAdapter
public class CardAdapter extends RecyclerView.Adapter<CardAdapter.ViewHolder> {
List<NatureItem> mItems;
public CardAdapter() {
super();
mItems = new ArrayList<NatureItem>();
NatureItem nature = new NatureItem();
nature.setName("The Great Barrier Reef");
nature.setDes("Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt" +
"ut labore et dolore magna aliqua. Ut enim ad minim veniam.");
nature.setThumbnail(R.drawable.tag_logo);
mItems.add(nature);
nature = new NatureItem();
nature.setName("Grand Canyon");
nature.setDes("Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt" +
"ut labore et dolore magna aliqua.");
nature.setThumbnail(R.drawable.tag_logo);
mItems.add(nature);
nature = new NatureItem();
nature.setName("Baltoro Glacier");
nature.setDes("Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt" +
"ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis.");
nature.setThumbnail(R.drawable.tag_logo);
mItems.add(nature);
nature = new NatureItem();
nature.setName("Iguazu Falls");
nature.setDes("Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt" +
"ut labore et dolore magna aliqua. Ut enim ad minim veniam.");
nature.setThumbnail(R.drawable.tag_logo);
mItems.add(nature);
nature = new NatureItem();
nature.setName("Aurora Borealis");
nature.setDes("Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt" +
"ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud.");
nature.setThumbnail(R.drawable.tag_logo);
mItems.add(nature);
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
View v = LayoutInflater.from(viewGroup.getContext())
.inflate(R.layout.recycler_view_card_item, viewGroup, false);
ViewHolder viewHolder = new ViewHolder(v);
return viewHolder;
}
@Override
public void onBindViewHolder(ViewHolder viewHolder, int i) {
NatureItem nature = mItems.get(i);
viewHolder.tvNature.setText(nature.getName());
viewHolder.tvDesNature.setText(nature.getDes());
viewHolder.imgThumbnail.setImageResource(nature.getThumbnail());
}
@Override
public int getItemCount() {
return mItems.size();
}
class ViewHolder extends RecyclerView.ViewHolder {
public ImageView imgThumbnail;
public TextView tvNature;
public TextView tvDesNature;
public ViewHolder(View itemView) {
super(itemView);
imgThumbnail = (ImageView) itemView.findViewById(R.id.img_thumbnail);
tvNature = (TextView) itemView.findViewById(R.id.tv_nature);
tvDesNature = (TextView) itemView.findViewById(R.id.tv_des_nature);
}
}
}
NatureItem
public class NatureItem {
private String mName;
private String mDes;
private int mThumbnail;
public String getName() {
return mName;
}
public void setName(String name) {
this.mName = name;
}
public String getDes() {
return mDes;
}
public void setDes(String des) {
this.mDes = des;
}
public int getThumbnail() {
return mThumbnail;
}
public void setThumbnail(int thumbnail) {
this.mThumbnail = thumbnail;
}
}
XML文件是正常的。 RecyclerView
中的activity_main.xml
和卡片视图中的一个xml
答案 0 :(得分:2)
为每个&#34; Card&#34;创建监听器如指定here。
至于从不同的卡片中打开不同的活动,我会建议每张卡片(在这种情况下为#34; NatureItem&#34;)来保持应该开始的活动的类别。
你可以这样做:
Intent intent = new Intent(context, nature.getClass());
context.startActivity(intent);
答案 1 :(得分:0)
在适配器的ViewHolder
类中添加以下内容:
public ViewHolder(View itemView) {
super(itemView);
.....
.....
itemView.setOnClickListener(new View.OnClickListener(){
// Start your activity
});
}
答案 2 :(得分:0)
NatureItem .java
class NatureItem {
private String name;
private String des;
private int setThumbnail;
private int activityType; //1...n
//its methods
public int getActivityType(){
return activityType;
}
public void setSetThumbnail(int setThumbnail) {
this.setThumbnail = setThumbnail;
}
public void setActivityType(int activityType){
this.activityType = activityType;
}
public void setName(String name) {
this.name = name;
}
public void setDes(String des) {
this.des = des;
}
public String getName() {
return name;
}
public String getDes() {
return des;
}
public int getThumbnail() {
return setThumbnail;
}
}
<强> ViewHolder.java 强>
class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener{
public ImageView imgThumbnail;
public TextView tvNature;
public TextView tvDesNature;
Callbacks callbacks;
View itemView;
public interface Callbacks{
public void onItemSelect(View v,int position);
}
public ViewHolder(View itemView,Callbacks callbacks) {
super(itemView);
this.itemView = itemView;
this.callbacks = callbacks;
imgThumbnail = (ImageView) itemView.findViewById(R.id.img_thumbnail);
tvNature = (TextView) itemView.findViewById(R.id.tv_nature);
tvDesNature = (TextView) itemView.findViewById(R.id.tv_des_nature);
itemView.setOnClickListener(this);
}
@Override
public void onClick(View v) {
if(callbacks!=null){
callbacks.onItemSelect(itemView,getAdapterPosition());
}
}
}
CardAdapter .java
class CardAdapter extends RecyclerView.Adapter<ViewHolder> {
List<NatureItem> mItems;
ViewHolder.Callbacks callbacks;
public CardAdapter(ViewHolder.Callbacks callbacks) {
super();
this.callbacks = callbacks;
mItems = new ArrayList<NatureItem>();
NatureItem nature = new NatureItem();
nature.setName("The Great Barrier Reef");
nature.setDes("Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt" +
"ut labore et dolore magna aliqua. Ut enim ad minim veniam.");
nature.setThumbnail(R.drawable.tag_logo);
mItems.add(nature);
nature = new NatureItem();
nature.setName("Grand Canyon");
nature.setActivityType(1); //activity type
nature.setDes("Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt" +
"ut labore et dolore magna aliqua.");
nature.setThumbnail(R.drawable.tag_logo);
mItems.add(nature);
nature = new NatureItem();
nature.setName("Baltoro Glacier");
nature.setActivityType(2);
nature.setDes("Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt" +
"ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis.");
nature.setThumbnail(R.drawable.tag_logo);
mItems.add(nature);
nature = new NatureItem();
nature.setName("Iguazu Falls");
nature.setActivityType(3);
nature.setDes("Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt" +
"ut labore et dolore magna aliqua. Ut enim ad minim veniam.");
nature.setThumbnail(R.drawable.tag_logo);
mItems.add(nature);
nature = new NatureItem();
nature.setName("Aurora Borealis");
nature.setDes("Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt" +
"ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud.");
nature.setThumbnail(R.drawable.tag_logo);
mItems.add(nature);
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
View v = LayoutInflater.from(viewGroup.getContext())
.inflate(R.layout.recycler_view_card_item, viewGroup, false);
ViewHolder viewHolder = new ViewHolder(v, callbacks);
return viewHolder;
}
@Override
public void onBindViewHolder(ViewHolder viewHolder, int i) {
NatureItem nature = mItems.get(i);
viewHolder.tvNature.setText(nature.getName());
viewHolder.tvDesNature.setText(nature.getDes());
viewHolder.imgThumbnail.setImageResource(nature.getThumbnail());
}
@Override
public int getItemCount() {
return mItems.size();
}
public NatureItem getItem(int pos){
return mItems.get(pos);
}
}
<强> MainActivity.java 强>
class MainActivity extends AppCompatActivity implements ViewHolder.Callbacks{
RecyclerView mRecyclerView;
RecyclerView.LayoutManager mLayoutManager;
CardAdapter mAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mRecyclerView = (RecyclerView) findViewById(R.id.recycler_view);
mRecyclerView.setHasFixedSize(true);
mLayoutManager = new LinearLayoutManager(this);
mRecyclerView.setLayoutManager(mLayoutManager);
mAdapter = new CardAdapter(this);
mRecyclerView.setAdapter(mAdapter);
}
@Override
public void onItemSelect(View v, int position) {
NatureItem natureItem = mAdapter.getItem(position);
if (natureItem.getActivityType() == 1) {
//start this activity
} else if (natureItem.getActivityType() == 2) {
//start this activity
}
}
}