我在此展示我的代码,这可能会对您有所帮助..
我的应用程序link 在 Play 商店中参考..
MainActivity.java
package com.amitabh.dhamma_jaagran;
import android.content.Intent;
import android.os.Bundle;
import android.support.design.widget.AppBarLayout;
import android.support.design.widget.CollapsingToolbarLayout;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.DefaultItemAnimator;
import android.support.v7.widget.GridLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.Toolbar;
import android.view.View;
import android.widget.ImageView;
import android.widget.TextView;
import java.util.ArrayList;
import java.util.List;
import com.bumptech.glide.Glide;
public class MainActivity extends AppCompatActivity {
private RecyclerView recyclerView;
private AlbumsAdapter adapter;
private AlbumsAdapter.AlbumsAdapterListener listener;
private List<Album> albumList;
private long backPressedTime = 0; // used by onBackPressed()
private static TextView footerText;
String currentVersion;
View parentLayout;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar toolbar = findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
initCollapsingToolbar();
footerText = findViewById(R.id.activity_main_footer);
parentLayout = findViewById(android.R.id.content);
recyclerView = findViewById(R.id.recycler_view);
// recyclerView.setHasFixedSize(true);
albumList = new ArrayList<>();
adapter = new AlbumsAdapter(this, albumList, listener);
RecyclerView.LayoutManager mLayoutManager = new GridLayoutManager(this, 2);
((GridLayoutManager) mLayoutManager).setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() {
@Override
public int getSpanSize(int position) {
return (position % 15 == 0 ? 2 : 1);
}
});
recyclerView.setLayoutManager(mLayoutManager);
recyclerView.setBackgroundColor(getResources().getColor(R.color.white));
// recyclerView.setBackgroundResource(R.drawable.white_background);
recyclerView.setItemAnimator(new DefaultItemAnimator());
recyclerView.setAdapter(adapter);
// row click listener
recyclerView.addOnItemTouchListener(new RecyclerTouchListener(getApplicationContext(), recyclerView, new RecyclerTouchListener.ClickListener() {
@Override
public void onClick(View view, int position) {
Album album = adapter.getAlbumList().get(position);
String text = album.getName();
// Toast.makeText(getApplicationContext(), text + " is selected", Toast.LENGTH_SHORT).show();
if (text == "तेरापंथ प्रबोध") {
view.getContext().startActivity(new Intent(view.getContext(), TerapanthPrabodhTabLayoutViewPager.class));
}
if (text == "संवत्सरी प्रतिक्रमण") {
view.getContext().startActivity(new Intent(view.getContext(), MangalStuti.class));
}
}
@Override
public void onLongClick(View view, int position) {
}
}));
prepareAlbums();
try {
Glide.with(this).load(R.drawable.cover2).into((ImageView) findViewById(R.id.backdrop));
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* Initializing collapsing toolbar
* Will show and hide the toolbar title on scroll
*/
private void initCollapsingToolbar() {
final CollapsingToolbarLayout collapsingToolbar =
findViewById(R.id.collapsing_toolbar);
collapsingToolbar.setTitle(" ");
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.album000,
R.drawable.album01,
};
Album a = new Album("तेरापंथ प्रबोध", "Terapanth Prabodh", covers[0]);
albumList.add(a);
a = new Album("मंगल स्तुति", "Mangal Stuti", covers[1]);
albumList.add(a);
adapter.notifyDataSetChanged();
}
}
Album.java
package com.amitabh.dhamma_jaagran;
public class Album
{
private String name;
private String numOfSongs;
private int thumbnail;
public Album() {}
public Album(String name, String numOfSongs, int thumbnail)
{
this.name = name;
this.numOfSongs = numOfSongs;
this.thumbnail = thumbnail;
}
public String getName()
{
return this.name;
}
public String getNumOfSongs()
{
return this.numOfSongs;
}
public int getThumbnail()
{
return this.thumbnail;
}
public void setName(String paramString)
{
this.name = name;
}
public void setNumOfSongs(String paramString)
{
this.numOfSongs = numOfSongs;
}
public void setThumbnail(int paramInt)
{
this.thumbnail = thumbnail;
}
}
AlbumsAdapter.java
package com.amitabh.dhamma_jaagran;
import android.content.Context;
import android.support.annotation.NonNull;
import android.support.v7.widget.CardView;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.widget.ImageView;
import android.widget.TextView;
import com.bumptech.glide.Glide;
import java.util.ArrayList;
import java.util.List;
public class AlbumsAdapter extends RecyclerView.Adapter<AlbumsAdapter.MyViewHolder> {
private Context mContext;
private List<Album> albumList;
private AlbumsAdapterListener listener;
private int lastPosition = -1;
public class MyViewHolder extends RecyclerView.ViewHolder {
public TextView title, count;
public ImageView thumbnail, overflow;
public CardView cardView;
public MyViewHolder(View view) {
super(view);
title = view.findViewById(R.id.title);
count = view.findViewById(R.id.count);
thumbnail = view.findViewById(R.id.thumbnail);
overflow = view.findViewById(R.id.overflow);
cardView = view.findViewById(R.id.card_view);
}
}
public AlbumsAdapter(Context mContext, List<Album> albumList, AlbumsAdapterListener
listener) {
this.mContext = mContext;
this.albumList = albumList;
this.listener = listener;
}
@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 onViewDetachedFromWindow(@NonNull AlbumsAdapter.MyViewHolder holder) {
super.onViewDetachedFromWindow(holder);
holder.itemView.clearAnimation();
}
@Override
public void onBindViewHolder(final MyViewHolder holder, final int position) {
Album album = albumList.get(position);
holder.title.setText(album.getName());
holder.count.setText(album.getNumOfSongs());
/*loading album cover using Glide library*/
Glide.with(mContext).load(album.getThumbnail()).into(holder.thumbnail);
Animation animation = AnimationUtils.loadAnimation(mContext,
(position > lastPosition) ? R.anim.up_from_bottom
: R.anim.down_from_top);
holder.itemView.startAnimation(animation);
lastPosition = position;
}
@Override
public int getItemCount() {
return albumList.size();
}
public interface AlbumsAdapterListener {
void onAddToFavoriteSelected(int position);
void onPlayNextSelected(int position);
void onCardSelected(int position, ImageView thumbnail);
}
public List<Album> getAlbumList(){
return albumList;
}
public void filter(ArrayList<Album> newList)
{
albumList=new ArrayList<>();
albumList.addAll(newList);
notifyDataSetChanged();
}
}
为了简单起见,我没有使用任何要保存的实例或 scollToPositon.. 但是当用户返回 MainActivity 时它会滚动到之前的位置..
这个答案与我猜你尝试过的类似..
我在 mainActivity 中创建了 RecyclerView 并对其进行了初始化。然后我创建了一个 ViewHolder 类,它为我的项目扩展 RecyclerView 以及 CardView 的 xml 文件......