在SharedPreferences中保存Viewpager的动态添加视图(页面)

时间:2017-03-06 10:11:12

标签: java android arraylist android-viewpager

嗨朋友们我很长时间都在尝试在shardepreferences中保存动态添加的Viewpager视图。因此,当用户下次打开应用程序时,他添加的页面或视图应该在那里。但我没有成功。我试图在sharedpreferences中保存ArrayList的大小,然后尝试调用下次用户打开应用程序时重新生成ArrayList的大小。我正在做的是我在寻呼机中添加的页数与for循环等于ArrayList的大小。我不知道这是正确的方式还是我完全错了。请通过这个指导我。提前致谢。我正在上传我的用户界面的图片enter image description here。我在这里粘贴我的代码。首先是我的适配器的代码。

import android.content.Context;
import android.content.SharedPreferences;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.FrameLayout;
import android.widget.LinearLayout;

import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;

import java.lang.reflect.Type;
import java.util.ArrayList;

public class MainPagerAdapter extends PagerAdapter
{       
    private ArrayList<View> views = new ArrayList<View>();
    SharedPreferences preferences;
    Context context;
    LayoutInflater inflater;
    final static String PREF_COUNT="com.savesampledata";
    final static String PREF_KEY="com.savesampledata.key";

    final static String PREF_LIST="com.savesampledata.list";
    final static String PREF_LIST_KEY="com.savesampledata.listkey";
    int numberofview;


    public MainPagerAdapter(Context c){
        context=c;
    }
    @Override
    public int getItemPosition (Object object)
    {
        int index = views.indexOf (object);
        if (index == -1)
            return POSITION_NONE;
        else
            return index;
    }        

    @Override
    public Object instantiateItem (ViewGroup container, int position)        
    {
        Log.v("instantiate is called","now");
        View v;

        v = views.get(position);
        if(v.getParent()!=null)
            ((ViewGroup)v.getParent()).removeView(v);
        container.addView(v);
        return v;
    }            
    @Override
    public void destroyItem (ViewGroup container, int position, Object object)
    {
        container.removeView (views.get (position));
    }
    @Override
    public int getCount ()
    {               
        Log.d("view list size",views.size()+"");
        Log.d("numofViews before save",numberofview+"");
        return views.size();
    }
    @Override
    public boolean isViewFromObject (View view, Object object)
    {
        return view == object;
    }
    public int addView (View v)
    {
        return addView (v, views.size());
    }
    public int addView (View v, int position)
    {
        views.add (position, v);
        return position;
    }
    public int removeView (ViewPager pager, View v)
    {
        return removeView (pager, views.indexOf (v));
    }
    public int removeView (ViewPager pager, int position)
    {
        if (numberofview > 1)
            position = numberofview - 1;
        if(position>0) {
            pager.setAdapter(null);
            views.remove(position);
            pager.setAdapter(this);
        }
        return position;
    }
    public View getView (int position)
    {               
        return views.get (position);
    }
    public void setCount(){
        //storing size of views list  
        SharedPreferences preferences=context.getSharedPreferences(PREF_COUNT,Context.MODE_PRIVATE);
        SharedPreferences.Editor editor=preferences.edit();
        editor.putInt(PREF_KEY,views.size());
        Log.d("shared stored  val :",views.size()+"");
        editor.apply();
    }
    public int getNumberOfView(){
        //getting size of views list
        SharedPreferences preferences=context.getSharedPreferences(PREF_COUNT, Context.MODE_PRIVATE);
        numberofview=preferences.getInt(PREF_KEY,0);
        return numberofview;
    }

}

我的活动代码:

import android.content.Context;
import android.content.SharedPreferences;
import android.support.v4.view.ViewPager;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.Button;
import android.widget.FrameLayout;
import android.widget.LinearLayout;

public class ViewPagerActivity extends AppCompatActivity implements View.OnClickListener {
    private ViewPager pager =null;
    private MainPagerAdapter pageradapter=null;
    Button addpagebtn,removebtn;
    final static String PREF_COUNT="com.savesampledata";
    final static String PREF_KEY="com.savesampledata.key";
    int numberofview;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.view_pager_activity);

        addpagebtn=(Button)findViewById(R.id.addbtn) ;
        removebtn=(Button)findViewById(R.id.removeButton);
        removebtn.setOnClickListener(this);
        addpagebtn.setOnClickListener(this);
        pageradapter= new MainPagerAdapter(this);
        pager=(ViewPager)findViewById(R.id.view_pager);
        pager.setAdapter(pageradapter);
        pager.setOffscreenPageLimit(3);

        numberofview=pageradapter.getNumberOfView();//here i am getting the value
        Log.d("value after saving",pageradapter.getNumberOfView()+"");
        LayoutInflater inflater=getLayoutInflater();
        FrameLayout v0=(FrameLayout)inflater.inflate(R.layout.sample_layout_page,null);
        pageradapter.addView(v0,0);
        pageradapter.notifyDataSetChanged();

        if(numberofview>1) {
            Log.d("ManyView","added");
            for (int i = 1; i <= numberofview; i++) {
                pageradapter.addView(v0,i);
                pageradapter.notifyDataSetChanged();    
            }
        }
    }
    public void addView(View newpage){
        int pageIndex=pageradapter.addView(newpage);
        Log.d("page added at",pageIndex+"");
        pageradapter.notifyDataSetChanged();
        pageradapter.setCount();
        pager.setCurrentItem(pageIndex,true);
    }
    public void removeView(View defunctPage){
        int pageindex=pageradapter.removeView(pager,defunctPage);
        Log.d("page removed at",pageindex+"");
        pageradapter.notifyDataSetChanged();
        pageradapter.setCount();
        if(pageindex==pageradapter.getCount())
            pageindex--;
        pager.setCurrentItem(pageindex);    
    }   
    public View getCurrentPage(){
        return pageradapter.getView(pager.getCurrentItem());
    }
    public void setCurrentPage(View pageToShow){
        pager.setCurrentItem(pageradapter.getItemPosition(pageToShow),true);
    }   
    @Override
    public void onClick(View v) {
        if(v.getId()==R.id.addbtn) {
            LayoutInflater inflater=getLayoutInflater();
            FrameLayout v0=(FrameLayout)inflater.inflate(R.layout.sample_layout_page,null);
            addView(v0);
            pageradapter.setCount();
        }
        if(v.getId()==R.id.removeButton){
            View v1=getCurrentPage();
            removeView(v1);
            pageradapter.setCount();    
        }
    }   
    @Override
    protected void onStop() {
        //here I am storing value
        super.onStop();
        pageradapter.setCount();
    }
}

0 个答案:

没有答案
相关问题