Android 保存Viewpager中fragement中存在的Recyclerview状态

Android 保存Viewpager中fragement中存在的Recyclerview状态,android,android-recyclerview,Android,Android Recyclerview,我的主要活动包含视图寻呼机,它有3个选项卡,每个选项卡包含一个片段,每个片段包含一个recyclerview。单击recyclerview中的项目时,将启动一个新活动。返回时,片段中的recylerview从初始位置开始。我想知道如何恢复recyclerview的职位 这是主要活动 public class MainActivity extends AppCompatActivity { private static final String TAG = "MainActivity"; p

我的主要活动包含视图寻呼机,它有3个选项卡,每个选项卡包含一个片段,每个片段包含一个recyclerview。单击recyclerview中的项目时,将启动一个新活动。返回时,片段中的recylerview从初始位置开始。我想知道如何恢复recyclerview的职位

这是主要活动

public class MainActivity extends AppCompatActivity {

private static final String TAG = "MainActivity";


private com.whiteturtlestudio.mywalls1.SectionsPageAdapter mSectionsPageAdapter;

private ViewPager mViewPager;
int vibrantColor = -1, mutedColor = -1;
int defaultColor = 0x000000;

DrawerLayout mDrawerLayout;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    Log.d(TAG, "onCreate: Starting.");




    Utils.getDatabase();
    mSectionsPageAdapter = new com.whiteturtlestudio.mywalls1.SectionsPageAdapter(getSupportFragmentManager());







    // Set up the ViewPager with the sections adapter.
    mViewPager = (ViewPager) findViewById(R.id.container);
    setupViewPager(mViewPager);
    mViewPager.setCurrentItem(1);

    TabLayout tabLayout = (TabLayout) findViewById(R.id.tabs);
    tabLayout.setupWithViewPager(mViewPager);

    Button like_frm_btn = (Button) findViewById(R.id.liked_fragement_btn);

    like_frm_btn.setOnClickListener(new View.OnClickListener() {
        public void onClick(View arg0) {

            // Start NewActivity.class
            Intent myIntent = new Intent(MainActivity.this,
                    LikedActivity.class);
            startActivity(myIntent);
        }
    });


    DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
    /*ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
            this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close);
    drawer.addDrawerListener(toggle);
    toggle.syncState();*/

    NavigationView navigationView = (NavigationView) findViewById(R.id.NavigationDrawer);
    navigationView.getMenu().getItem(0).setChecked(true);
    navigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() {
        @Override
        public boolean onNavigationItemSelected(final MenuItem menuItem) {

            int id = menuItem.getItemId();

            if (id == R.id.nav_home) {



            }if (id == R.id.nav_donate) {



            } else if (id == R.id.nav_share) {


            } else if (id == R.id.nav_rate_us) {


            } else if (id == R.id.nav_about) {


                Intent i = new Intent(MainActivity.this, AboutActivity.class);
                MainActivity.this.startActivity(i);



            }

            DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
            drawer.closeDrawer(GravityCompat.START);
            return true;
        }

    });



}


private void setupViewPager(ViewPager viewPager) {
    com.whiteturtlestudio.mywalls1.SectionsPageAdapter adapter = new com.whiteturtlestudio.mywalls1.SectionsPageAdapter(getSupportFragmentManager());
    adapter.addFragement(new tab1fragment(), "");
    adapter.addFragement(new tab2fragment(), "");
    adapter.addFragement(new tab3fragment(), "");
    viewPager.setAdapter(adapter);
}
}

这是我的片段,包含recyclerview

public class tab2fragment extends Fragment {

private RecyclerView home_rec;
private DatabaseReference mDatabase;
private DatabaseReference mDatabaseLikes;
private static Context context = null;
public static  boolean Likestate = false;
private static String android_id;
private static int width;
private static int height;
private static DisplayMetrics dm;
private static String DatabaseName;





@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.tab2,container,false);


    android_id = Secure.getString(getContext().getContentResolver(),
            Secure.ANDROID_ID);

    DatabaseName = "HomeData";

    mDatabase= FirebaseDatabase.getInstance().getReference().child(DatabaseName);
    mDatabaseLikes = FirebaseDatabase.getInstance().getReference().child("Likes");


    mDatabase.keepSynced(true);
    mDatabaseLikes.keepSynced(true);
    context=getActivity();


    home_rec=(RecyclerView)view.findViewById(R.id.RecyclerHome);
    home_rec.setHasFixedSize(true);
    home_rec.setLayoutManager(new LinearLayoutManager(getActivity()));


    dm = new DisplayMetrics();
    getActivity().getWindowManager().getDefaultDisplay().getMetrics(dm);

    width = dm.widthPixels;
    height = dm.heightPixels;

    return view;

}


@Override
public void onStart() {
    super.onStart();
    FirebaseRecyclerAdapter<HomeData,WallViewHolder> firebaseRecyclerAdapter = new FirebaseRecyclerAdapter<HomeData, WallViewHolder>
            (HomeData.class,R.layout.home_item,WallViewHolder.class,mDatabase) {
        @Override
        protected void populateViewHolder(WallViewHolder viewHolder, final HomeData model, int position) {

            final String Wall_id = model.getId();

            final String wallOrderID = getRef(position).getKey();

            //Toast.makeText(context,wallOrderID,Toast.LENGTH_SHORT).show();

            viewHolder.setName(model.getName());
            viewHolder.setCategory(model.getCategory());
            viewHolder.setLikes(model.getLikes(), Wall_id, wallOrderID);
            viewHolder.setUrl(getContext(), model.getUrl());
            viewHolder.setCat_url(getContext(), model.getCat_url());
            viewHolder.setHigh_res_url(model.getHigh_res_url());
            viewHolder.setArtist_name(model.getArtist_name());
            viewHolder.setArtist_url(model.getArtist_url());
            viewHolder.setSource(model.getSource());
            viewHolder.setId(model.getId());


            viewHolder.setLikeBtn(Wall_id, android_id, model.getLikes());




            viewHolder.mlike_btn.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {

                    Likestate = true;
                    final String likes = model.getLikes();


                        mDatabaseLikes.addValueEventListener(new ValueEventListener() {
                            @Override
                            public void onDataChange(DataSnapshot dataSnapshot) {

                                if(Likestate) {

                                    if (dataSnapshot.child(Wall_id).hasChild(android_id)) {
                                        mDatabaseLikes.child(Wall_id).child(android_id).removeValue();
                                        Likestate = false;

                                        //decr count
                                        int likeplus = Integer.parseInt(likes.replaceAll("[\\D]", ""));
                                        likeplus = likeplus - 1;
                                        mDatabase.child(wallOrderID).child("likes").setValue(Integer.toString(likeplus));




                                    } else {
                                        mDatabaseLikes.child(Wall_id).child(android_id).setValue("Random");
                                        Likestate = false;

                                        //incr count
                                        int likeplus =Integer.parseInt(likes.replaceAll("[\\D]", ""));
                                        likeplus = likeplus + 1;
                                        mDatabase.child(wallOrderID).child("likes").setValue(Integer.toString(likeplus));


                                    }
                                }

                            }

                            @Override
                            public void onCancelled(DatabaseError databaseError) {

                            }
                        });




                }
            });


        }
    };
    home_rec.setAdapter(firebaseRecyclerAdapter);

}


public static class WallViewHolder extends RecyclerView.ViewHolder
{

    String wall_name;
    String no_likes;
    Bitmap wall_image;
    Bitmap cat_image;
    ImageView post_img;
    View mView;
    String high_res;
    String artist_name_val;
    String category_name;
    String artist_url_val;
    ImageView mlike_btn;
    String source_val;
    String id_val;
    String Wall_id;
    String wallOrderID;
    String thumb_url;
    DatabaseReference mDatabaseLikes;


    public WallViewHolder(View itemView)
    {
        super(itemView);
        mView=itemView;

        mlike_btn = (ImageView)mView.findViewById(R.id.like_btn);

        mDatabaseLikes = FirebaseDatabase.getInstance().getReference().child("Likes");
        mDatabaseLikes.keepSynced(true);



        post_img = (ImageView)mView.findViewById(R.id.home_img);
        post_img.getLayoutParams().height = width;
        post_img.getLayoutParams().width = width;
        post_img.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                Intent go = new Intent(context, WallpaperActivity.class);
                go.putExtra("wall_name", wall_name);
                go.putExtra("no_likes", no_likes);
                go.putExtra("high_res_url", high_res);
                go.putExtra("artist_name", artist_name_val);
                go.putExtra("category_name",category_name);
                go.putExtra("artist_url", artist_url_val);
                go.putExtra("Wall_id", Wall_id);
                go.putExtra("android_id", android_id);
                go.putExtra("DBname", DatabaseName);
                go.putExtra("website", source_val);
                go.putExtra("wallOrder", wallOrderID);
                go.putExtra("thumbUrl", thumb_url);



                createImageFromBitmap(wall_image);
                createCatImageFromBitmap(cat_image);

                context.startActivity(go);



            }
        });



        /*ImageView popup = (ImageView)mView.findViewById(R.id.popup_but);
        popup.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent pop = new Intent(context, popup.class);
                context.startActivity(pop);
            }
        });*/


    }

    public void setLikeBtn(final String Wall_id, final String android_id, final String likes){


        mDatabaseLikes.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {

                if (dataSnapshot.child(Wall_id).hasChild(android_id)) {

                    mlike_btn.setImageResource(R.drawable.like_pressed);


                    } else {
                        mlike_btn.setImageResource(R.drawable.unliked_heart);



                    }
                }



            @Override
            public void onCancelled(DatabaseError databaseError) {

            }
        });

    }

    public void setName(String name)
    {
        TextView img_name = (TextView)mView.findViewById(R.id.home_img_text);
        img_name.setText(name);
        wall_name = name;


    }
    public void setLikes(String likes, String Wall, String wallOrder)
    {

        TextView post_likes = (TextView)mView.findViewById(R.id.home_likes);
        post_likes.setText(likes);
        no_likes = likes;
        Wall_id = Wall;
        wallOrderID = wallOrder;


    }
    public void setCategory(String category)
    {
        TextView img_name = (TextView)mView.findViewById(R.id.home_cat_text);
        img_name.setText(category);
        category_name = category;
    }
    public void setUrl(Context ctx, String url){

        //Picasso.with(ctx).load(url).into(target);

        Glide.with(itemView.getContext())
                .asBitmap()
                .load(url)
                .into(new SimpleTarget<Bitmap>() {
                    @Override
                    public void onResourceReady(Bitmap resource, Transition<? super Bitmap> transition) {

                        wall_image = resource;
                        post_img.setImageBitmap(wall_image);
                    }
                });

        thumb_url = url;
    }
    public void setCat_url(Context ctx, String cat_url){

        Glide.with(itemView.getContext())
                .asBitmap()
                .load(cat_url)
                .into(new SimpleTarget<Bitmap>() {
                    @Override
                    public void onResourceReady(Bitmap resource, Transition<? super Bitmap> transition) {

                        cat_image = resource;
                        ImageView hom_cat_img = (ImageView)mView.findViewById(R.id.home_cat_img);
                        hom_cat_img.setImageBitmap(cat_image);
                        hom_cat_img.setOnClickListener(new View.OnClickListener() {
                            @Override
                            public void onClick(View view) {
                                Intent i = new Intent(context,CategoryActivity.class);
                                String category = category_name.toLowerCase();
                                i.putExtra("Category_name",category);
                                context.startActivity(i);
                            }
                        });

                    }
                });


    }

    public void setHigh_res_url(String high_res_url){
        high_res = high_res_url;
    }

    public void setArtist_name(String artist_name){
        artist_name_val = artist_name;
    }

    public void setArtist_url(String artist_url){
        artist_url_val = artist_url;
    }

    public void setSource(String source) { source_val = source; }

    public void setId(String Id) { id_val = Id; }





    public String createImageFromBitmap(Bitmap bitmap) {
        String fileName = "myImage";//no .png or .jpg needed
        try {
            ByteArrayOutputStream bytes = new ByteArrayOutputStream();
            bitmap.compress(Bitmap.CompressFormat.JPEG, 100, bytes);
            FileOutputStream fo = context.openFileOutput(fileName, Context.MODE_PRIVATE);
            fo.write(bytes.toByteArray());
            // remember close file output
            fo.close();
        } catch (Exception e) {
            e.printStackTrace();
            fileName = null;
        }
        return fileName;
    }

    public String createCatImageFromBitmap(Bitmap bitmap) {
        String fileName = "my_Cat_Image";//no .png or .jpg needed
        try {
            ByteArrayOutputStream bytes = new ByteArrayOutputStream();
            bitmap.compress(Bitmap.CompressFormat.JPEG, 100, bytes);
            FileOutputStream fo = context.openFileOutput(fileName, Context.MODE_PRIVATE);
            fo.write(bytes.toByteArray());
            // remember close file output
            fo.close();
        } catch (Exception e) {
            e.printStackTrace();
            fileName = null;
        }
        return fileName;
    }



}






    @Override
public void onPause()
{
    super.onPause();

}

@Override
public void onResume() {
    super.onResume();
}
公共类tab2fragment扩展片段{
私人回收屋;
私有数据库参考数据库;
私有数据库引用mDatabaseLikes;
私有静态上下文=null;
公共静态布尔值=false;
私有静态字符串;
私有静态整数宽度;
私有静态内部高度;
私有静态数据挖掘;
私有静态字符串数据库名;
@可空
@凌驾
创建视图时的公共视图(LayoutFlater充气机、@Nullable ViewGroup容器、@Nullable Bundle savedInstanceState){
视图=充气机。充气(R.layout.tab2,容器,假);
android_id=Secure.getString(getContext().getContentResolver(),
安卓(ANDROID),;
DatabaseName=“HomeData”;
mDatabase=FirebaseDatabase.getInstance().getReference().child(DatabaseName);
mDatabaseLikes=FirebaseDatabase.getInstance().getReference().child(“Likes”);
mDatabase.keepSynced(true);
mDatabaseLikes.keepSynced(true);
context=getActivity();
home_rec=(RecyclerView)view.findViewById(R.id.RecyclerHome);
主记录setHasFixedSize(真);
主目录setLayoutManager(新的LinearLayoutManager(getActivity());
dm=新的DisplayMetrics();
getActivity().getWindowManager().getDefaultDisplay().getMetrics(dm);
宽度=dm.widthPixels;
高度=dm.heightPixels;
返回视图;
}
@凌驾
public void onStart(){
super.onStart();
FirebaseRecyclerAdapter FirebaseRecyclerAdapter=新的FirebaseRecyclerAdapter
(HomeData.class,R.layout.home_项,WallViewHolder.class,mDatabase){
@凌驾
受保护的void populateViewHolder(WallViewHolder viewHolder,最终家庭数据模型,内部位置){
最终字符串Wall_id=model.getId();
最后一个字符串wallOrderID=getRef(position).getKey();
//Toast.makeText(上下文、wallOrderID、Toast.LENGTH_SHORT).show();
viewHolder.setName(model.getName());
viewHolder.setCategory(model.getCategory());
viewHolder.setLikes(model.getLikes(),Wall_id,wallOrderID);
setUrl(getContext(),model.getUrl());
setCat_url(getContext(),model.getCat_url());
viewHolder.setHigh_res_url(model.getHigh_res_url());
viewHolder.setArtist_name(model.getArtist_name());
viewHolder.setArtist_url(model.getArtist_url());
viewHolder.setSource(model.getSource());
setId(model.getId());
setLikeBtn(Wall_id,android,model.getLikes());
viewHolder.mlike_btn.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图){
Likestate=true;
最后一个字符串likes=model.getLikes();
mDatabaseLikes.addValueEventListener(新的ValueEventListener(){
@凌驾
公共void onDataChange(DataSnapshot DataSnapshot){
如有(如有){
if(dataSnapshot.child(Wall_id).hasChild(android)){
mDatabaseLikes.child(Wall_id).child(android_id).removeValue();
likstate=假;
//递减计数
int-likeplus=Integer.parseInt(likes.replaceAll(“[\\D]”,“”));
likeplus=likeplus-1;
mDatabase.child(wallOrderID).child(“likes”).setValue(Integer.toString(likeplus));
}否则{
mDatabaseLikes.child(Wall_id).child(android_id).setValue(“随机”);
likstate=假;
//递增计数
int-likeplus=Integer.parseInt(likes.replaceAll(“[\\D]”,“”));
likeplus=likeplus+1;
mDatabase.child(wallOrderID).child(“likes”).setValue(Integer.toString(likeplus));
}
}
}
@凌驾
已取消的公共void(DatabaseError DatabaseError){
}
});
}
});
}
};
home_rec.setAdapter(firebaseRecyclerAdapter);
}
公共静态类WallViewHolder扩展了RecyclerView.ViewHolder
{
字符串名称;
没有你喜欢的线;
位图墙图像;
位图cat_图像;
ImageView post_img;
视图视图;
串高分辨率;
弦乐艺术家_name_val;
字符串类别名称;
字符串艺术家_url_val;
ImageView mlike_btn;
字符串源值;
字符串id_val;
串墙标识;
字符串wallOrderID;
字符串thumb\u url;
数据库引用mDatabaseLikes;
公共WallViewHolder(视图项视图)
{
超级(项目视图);
mView=项目视图;
mlike_btn=(ImageView)mView.findviewbyd(R.id.like_btn);
mDatabaseLikes=FirebaseDatabase.getInstance().getReference().child(“Likes”);
mDatabaseLikes.keepSynced(true);
post_img=(ImageView)mView.findviewbyd(R.id.home_img);
post_img.getLayoutParams().heigh