java Android Cardview点击不同的活动
我很难弄明白这一点。我正在创建一个Android应用程序,用户(登录后)会在回收器视图中看到一个带有cardview列表的活动
我希望用户能够点击一张卡片,进入另一个活动。如果你点击卡片1,你必须进入游戏1的活动。如果你点击卡片2,你必须进入游戏2的活动。等等
这是我登录后的“主要”活动:
package com.afmob.gaming;
import 安卓.content.Intent;
import 安卓.content.res.Resources;
import 安卓.graphics.Rect;
import 安卓.support.design.widget.AppBarLayout;
import 安卓.support.design.widget.CollapsingToolbarLayout;
import 安卓.support.v7.app.AppCompatActivity;
import 安卓.support.v7.widget.DefaultItemAnimator;
import 安卓.support.v7.widget.GridLayoutManager;
import 安卓.support.v7.widget.RecyclerView;
import 安卓.support.v7.widget.Toolbar;
import 安卓.os.Bundle;
import 安卓.util.Log;
import 安卓.util.TypedValue;
import 安卓.view.Menu;
import 安卓.view.MenuInflater;
import 安卓.view.MenuItem;
import 安卓.view.View;
import 安卓.widget.Button;
import 安卓.widget.ImageView;
import 安卓.widget.Toast;
import com.bumptech.glide.Glide;
import java.util.ArrayList;
import java.util.List;
public class GamesCatalog extends AppCompatActivity {
private Toolbar toolbar;
// Added for cardview
private RecyclerView recyclerView;
private AlbumsAdapter adapter;
private List<Album> albumList;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.games_catalog);
// Might have to change the toolbar to the system one, also in the xml file
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
// Added for cardview
initCollapsingToolbar();
recyclerView = (RecyclerView) findViewById(R.id.recycler_view);
albumList = new ArrayList<>();
adapter = new AlbumsAdapter(this, albumList);
RecyclerView.LayoutManager mLayoutManager = new GridLayoutManager(this, 2);
recyclerView.setLayoutManager(mLayoutManager);
recyclerView.addItemDecoration(new GridSpacingItemDecoration(2, dpToPx(10), true));
recyclerView.setItemAnimator(new DefaultItemAnimator());
recyclerView.setAdapter(adapter);
prepareAlbums();
try {
Glide.with(this).load(R.drawable.cover).into((ImageView) findViewById(R.id.backdrop));
} catch (Exception e) {
e.printStackTrace();
}
}
// Added for cardview
/**
* Initializing collapsing toolbar
* Will show and hide the toolbar title on scroll
*/
private void initCollapsingToolbar() {
final CollapsingToolbarLayout collapsingToolbar =
(CollapsingToolbarLayout) findViewById(R.id.collapsing_toolbar);
collapsingToolbar.setTitle(" ");
AppBarLayout appBarLayout = (AppBarLayout) findViewById(R.id.appbar);
appBarLayout.setExpanded(true);
// hiding & showing the title when toolbar expanded & collapsed
appBarLayout.addOnOffsetChangedListener(new AppBarLayout.OnOffsetChangedListener() {
boolean isShow = false;
int scrollRange = -1;
@Override
public void onOffsetChanged(AppBarLayout appBarLayout, int verticalOffset) {
if (scrollRange == -1) {
scrollRange = appBarLayout.getTotalScrollRange();
}
if (scrollRange + verticalOffset == 0) {
collapsingToolbar.setTitle(getString(R.string.app_name));
isShow = true;
} else if (isShow) {
collapsingToolbar.setTitle(" ");
isShow = false;
}
}
});
}
/**
* Adding few albums for testing
*/
private void prepareAlbums() {
int[] covers = new int[]{
R.drawable.album1,
R.drawable.album2,
R.drawable.album3,
R.drawable.album4,
R.drawable.album5,
R.drawable.album6,
R.drawable.album7,
R.drawable.album8,
R.drawable.album9,
R.drawable.album10,
R.drawable.album11};
Album a = new Album("Maroon5", 13, covers[0]);
albumList.add(a);
a = new Album("Sugar Ray", 8, covers[1]);
albumList.add(a);
a = new Album("Bon Jovi", 11, covers[2]);
albumList.add(a);
a = new Album("The Corrs", 12, covers[3]);
albumList.add(a);
a = new Album("The Cranberries", 14, covers[4]);
albumList.add(a);
a = new Album("Westlife", 1, covers[5]);
albumList.add(a);
a = new Album("Black Eyed Peas", 11, covers[6]);
albumList.add(a);
a = new Album("VivaLaVida", 14, covers[7]);
albumList.add(a);
a = new Album("The Cardigans", 11, covers[8]);
albumList.add(a);
a = new Album("Pussycat Dolls", 17, covers[9]);
albumList.add(a);
adapter.notifyDataSetChanged();
}
/**
* RecyclerView item decoration - give equal margin around grid item
*/
public class GridSpacingItemDecoration extends RecyclerView.ItemDecoration {
private int spanCount;
private int spacing;
private boolean includeEdge;
public GridSpacingItemDecoration(int spanCount, int spacing, boolean includeEdge) {
this.spanCount = spanCount;
this.spacing = spacing;
this.includeEdge = includeEdge;
}
@Override
public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) {
int position = parent.getChildAdapterPosition(view); // item position
int column = position % spanCount; // item column
if (includeEdge) {
outRect.left = spacing - column * spacing / spanCount; // spacing - column * ((1f / spanCount) * spacing)
outRect.right = (column + 1) * spacing / spanCount; // (column + 1) * ((1f / spanCount) * spacing)
if (position < spanCount) { // top edge
outRect.top = spacing;
}
outRect.bottom = spacing; // item bottom
} else {
outRect.left = column * spacing / spanCount; // column * ((1f / spanCount) * spacing)
outRect.right = spacing - (column + 1) * spacing / spanCount; // spacing - (column + 1) * ((1f / spanCount) * spacing)
if (position >= spanCount) {
outRect.top = spacing; // item top
}
}
}
}
/**
* Converting dp to pixel
*/
private int dpToPx(int dp) {
Resources r = getResources();
return Math.round(TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dp, r.getDisplayMetrics()));
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.menu_main, menu);
return true;
}
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
if (id==R.id.navigate) {
startActivity(new Intent(this, SettingsActivity.class));
}
return super.onOptionsItemSelected(item);
}
}
这是我的适配器:
package com.afmob.gaming;
import 安卓.content.Context;
import 安卓.support.v7.widget.PopupMenu;
import 安卓.support.v7.widget.RecyclerView;
import 安卓.view.LayoutInflater;
import 安卓.view.MenuInflater;
import 安卓.view.MenuItem;
import 安卓.view.View;
import 安卓.view.ViewGroup;
import 安卓.widget.ImageView;
import 安卓.widget.TextView;
import 安卓.widget.Toast;
import com.bumptech.glide.Glide;
import java.util.List;
/**
* Created by Ravi Tamada on 18/05/16.
*/
public class AlbumsAdapter extends RecyclerView.Adapter<AlbumsAdapter.MyViewHolder> {
private Context mContext;
private List<Album> albumList;
public class MyViewHolder extends RecyclerView.ViewHolder {
public TextView title, count;
public ImageView thumbnail, overflow;
public MyViewHolder(View view) {
super(view);
title = (TextView) view.findViewById(R.id.title);
count = (TextView) view.findViewById(R.id.count);
thumbnail = (ImageView) view.findViewById(R.id.thumbnail);
overflow = (ImageView) view.findViewById(R.id.overflow);
}
}
public AlbumsAdapter(Context mContext, List<Album> albumList) {
this.mContext = mContext;
this.albumList = albumList;
}
@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View itemView = LayoutInflater.from(parent.getContext())
.inflate(R.layout.album_card, parent, false);
return new MyViewHolder(itemView);
}
@Override
public void onBindViewHolder(final MyViewHolder holder, int position) {
Album album = albumList.get(position);
holder.title.setText(album.getName());
holder.count.setText(album.getNumOfSongs() + " songs");
// loading album cover using Glide library
Glide.with(mContext).load(album.getThumbnail()).into(holder.thumbnail);
holder.overflow.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
showPopupMenu(holder.overflow);
}
});
}
/**
* Showing popup menu when tapping on 3 dots
*/
private void showPopupMenu(View view) {
// inflate menu
PopupMenu popup = new PopupMenu(mContext, view);
MenuInflater inflater = popup.getMenuInflater();
inflater.inflate(R.menu.menu_album, popup.getMenu());
popup.setOnMenuItemClickListener(new MyMenuItemClickListener());
popup.show();
}
/**
* Click listener for popup menu items
*/
class MyMenuItemClickListener implements PopupMenu.OnMenuItemClickListener {
public MyMenuItemClickListener() {
}
@Override
public boolean onMenuItemClick(MenuItem menuItem) {
switch (menuItem.getItemId()) {
case R.id.action_add_favourite:
Toast.makeText(mContext, "Add to favourite", Toast.LENGTH_SHORT).show();
return true;
case R.id.action_play_next:
Toast.makeText(mContext, "Play next", Toast.LENGTH_SHORT).show();
return true;
default:
}
return false;
}
}
// Added in for click on each card
@Override
public int getItemCount() {
return albumList.size();
}
}
这是每张卡片的样子:
<LinearLayout xmlns:安卓="http://schemas.安卓.com/apk/res/安卓"
xmlns:card_view="http://schemas.安卓.com/apk/res-auto"
安卓:layout_width="match_parent"
安卓:layout_height="wrap_content">
<安卓.support.v7.widget.CardView
安卓:id="@+id/card_view"
安卓:layout_width="match_parent"
安卓:layout_height="match_parent"
安卓:layout_gravity="center"
安卓:layout_margin="@dimen/card_margin"
安卓:elevation="3dp"
card_view:cardCornerRadius="@dimen/card_album_radius">
<RelativeLayout
安卓:layout_width="match_parent"
安卓:layout_height="match_parent">
<ImageView
安卓:id="@+id/thumbnail"
安卓:layout_width="match_parent"
安卓:layout_height="@dimen/album_cover_height"
安卓:background="?attr/selectableItemBackgroundBorderless"
安卓:clickable="true"
安卓:scaleType="fitXY" />
<TextView
安卓:id="@+id/title"
安卓:layout_width="match_parent"
安卓:layout_height="wrap_content"
安卓:layout_below="@id/thumbnail"
安卓:paddingLeft="@dimen/album_title_padding"
安卓:paddingRight="@dimen/album_title_padding"
安卓:paddingTop="@dimen/album_title_padding"
安卓:textColor="@color/album_title"
安卓:textSize="@dimen/album_title" />
<TextView
安卓:id="@+id/count"
安卓:layout_width="match_parent"
安卓:layout_height="wrap_content"
安卓:layout_below="@id/title"
安卓:paddingBottom="@dimen/songs_count_padding_bottom"
安卓:paddingLeft="@dimen/album_title_padding"
安卓:paddingRight="@dimen/album_title_padding"
安卓:textSize="@dimen/songs_count" />
<ImageView
安卓:id="@+id/overflow"
安卓:layout_width="@dimen/ic_album_overflow_width"
安卓:layout_height="@dimen/ic_album_overflow_height"
安卓:layout_alignParentRight="true"
安卓:layout_below="@id/thumbnail"
安卓:layout_marginTop="@dimen/ic_album_overflow_margin_top"
安卓:scaleType="centerCrop"
安卓:src="@drawable/ic_dots" />
</RelativeLayout>
</安卓.support.v7.widget.CardView>
</LinearLayout>
这就是recyclerview的外观:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:安卓="http://schemas.安卓.com/apk/res/安卓"
xmlns:app="http://schemas.安卓.com/apk/res-auto"
xmlns:tools="http://schemas.安卓.com/tools"
安卓:layout_width="match_parent"
安卓:layout_height="match_parent"
安卓:background="@color/viewBg"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
tools:context="com.afmob.gaming.GamesCatalog"
tools:showIn="@layout/games_catalog">
<安卓.support.v7.widget.RecyclerView
安卓:id="@+id/recycler_view"
安卓:layout_width="match_parent"
安卓:layout_height="wrap_content"
安卓:clipToPadding="false"
安卓:scrollbars="vertical" />
</RelativeLayout>
主要观点如下:
<?xml version="1.0" encoding="utf-8"?>
<安卓.support.design.widget.CoordinatorLayout xmlns:安卓="http://schemas.安卓.com/apk/res/安卓"
xmlns:app="http://schemas.安卓.com/apk/res-auto"
安卓:id="@+id/main_content"
安卓:layout_width="match_parent"
安卓:layout_height="match_parent"
安卓:background="@安卓:color/white"
安卓:fitsSystemWindows="true">
<安卓.support.design.widget.AppBarLayout
安卓:id="@+id/appbar"
安卓:layout_width="match_parent"
安卓:layout_height="@dimen/detail_backdrop_height"
安卓:fitsSystemWindows="true"
安卓:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">
<安卓.support.design.widget.CollapsingToolbarLayout
安卓:id="@+id/collapsing_toolbar"
安卓:layout_width="match_parent"
安卓:layout_height="match_parent"
安卓:fitsSystemWindows="true"
app:contentScrim="?attr/colorPrimary"
app:expandedTitleMarginEnd="64dp"
app:expandedTitleMarginStart="48dp"
app:expandedTitleTextAppearance="@安卓:color/transparent"
app:layout_scrollFlags="scroll|exitUntilCollapsed">
<RelativeLayout
安卓:layout_width="wrap_content"
安卓:layout_height="wrap_content">
<ImageView
安卓:id="@+id/backdrop"
安卓:layout_width="match_parent"
安卓:layout_height="match_parent"
安卓:fitsSystemWindows="true"
安卓:scaleType="centerCrop"
app:layout_collapseMode="parallax" />
<LinearLayout
安卓:layout_width="wrap_content"
安卓:layout_height="wrap_content"
安卓:layout_centerInParent="true"
安卓:gravity="center_horizontal"
安卓:orientation="vertical">
<TextView
安卓:id="@+id/love_music"
安卓:layout_width="wrap_content"
安卓:layout_height="wrap_content"
安卓:text="@string/backdrop_title"
安卓:textColor="@安卓:color/white"
安卓:textSize="@dimen/backdrop_title" />
<TextView
安卓:layout_width="wrap_content"
安卓:layout_height="wrap_content"
安卓:text="@string/backdrop_subtitle"
安卓:textColor="@安卓:color/white"
安卓:textSize="@dimen/backdrop_subtitle" />
</LinearLayout>
</RelativeLayout>
<安卓.support.v7.widget.Toolbar
安卓:id="@+id/toolbar"
安卓:layout_width="match_parent"
安卓:layout_height="?attr/actionBarSize"
app:layout_collapseMode="pin"
app:popupTheme="@style/ThemeOverlay.AppCompat.Light" />
</安卓.support.design.widget.CollapsingToolbarLayout>
</安卓.support.design.widget.AppBarLayout>
<include layout="@layout/content_main" />
</安卓.support.design.widget.CoordinatorLayout>
请帮帮我
# 1 楼答案
一,。创建一个接口
然后在适配器中:
在MyViewHolder类中
三,。在你的活动中:
然后可以在活动中重写OnClick()方法
希望这对你有帮助
# 2 楼答案
将MyViewHolder编辑为:
onBindViewHolder: