应用关闭时重置的SharedPreferences

时间:2016-12-28 19:39:38

标签: android android-sharedpreferences

我有一个ListView片段,可以选择保存特定的表值。您可以单击按钮切换表以仅显示已保存的值。当切换激活而不是保存时,您可以选择删除值。我注意到,虽然只要应用程序打开,删除将永久删除值,如果我关闭应用程序并重新打开它,该值将重新出现。此外,如果我删除该应用程序并重新安装此相同的值重新出现。我不确定这个值是如何被添加的以及为什么它拒绝去。调试显示我在SharedPreferences中保存了正确的值,但这不会保留。

编辑:经过一些测试后,似乎保存在特定SharedPreferences中的第一个项目将永久保存。它无法删除,保存的所有其他值都不会保留。

Fragment

package layout;

import android.app.AlertDialog;
import android.content.DialogInterface;
import android.preference.PreferenceManager;
import android.support.design.widget.FloatingActionButton;
import android.support.v4.widget.SwipeRefreshLayout;
import android.content.Context;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentTransaction;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.ListView;
import android.widget.SearchView;
import android.widget.TextView;
import android.os.StrictMode;
import com.tble.brgo.HTMLPull;
import com.tble.brgo.InfoArticle;
import com.tble.brgo.R;
import android.widget.AdapterView.OnItemClickListener;
import java.io.IOException;
import java.lang.reflect.Array;
import java.util.ArrayList;
import android.text.TextUtils;
import java.util.HashSet;
import java.util.Set;

/**
 * A simple {@link Fragment} subclass.
 * Use the {@link Websites#newInstance} factory method to
 * create an instance of this fragment.
 */
public class Websites extends Fragment implements SearchView.OnQueryTextListener, displayInterface {
    // TODO: Rename parameter arguments, choose names that match
    // the fragment initialization parameters, e.g. ARG_ITEM_NUMBER
    private SearchView mSearchView;
    private ListView mListView;
    public Boolean toggle = false;
    public ArrayList<InfoArticle> mData = new ArrayList<InfoArticle>();
    public StandardCellAdapter mAdapter;
    public ArrayList<InfoArticle> fDataSet = new ArrayList<InfoArticle>();
    public Websites webTable;
    public Websites() {
        // Required empty public constructor
    }

    /**
     * Use this factory method to create a new instance of
     * this fragment using the provided parameters.
     *
     * @return A new instance of fragment Websites.
     */
    // TODO: Rename and change types and number of parameters
    public static Websites newInstance() {
        Websites fragment = new Websites();
        Bundle args = new Bundle();
        fragment.setArguments(args);
        return fragment;
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        toggle = false;
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        View view = inflater.inflate(R.layout.fragment_websites, container, false);
        StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder()
                .permitAll().build();
        StrictMode.setThreadPolicy(policy);
        ArrayList<InfoArticle> data = new ArrayList<InfoArticle>();
        webTable = this;
        try {
            data = getData();
        } catch (IOException e) {
            e.printStackTrace();
        }

        mListView = (ListView) view.findViewById(R.id.WebsiteTable);
        final StandardCellAdapter adapter = new StandardCellAdapter(getActivity(), data, 1,this);
        fDataSet = data;
        mData = data;
        mListView.setAdapter(adapter);
        mAdapter = adapter;
        mSearchView = (SearchView) view.findViewById(R.id.searchView);
        mListView.setTextFilterEnabled(true);
        FloatingActionButton myFab = (FloatingActionButton) view.findViewById(R.id.dataToggle);
        myFab.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
            toggleView();
            }
        });
        setupSearchView();
        final SwipeRefreshLayout swipeLayout = (SwipeRefreshLayout) view.findViewById(R.id.webRefresh);
        swipeLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
            @Override
            public void onRefresh() {
                try {
                    mData = getData();
                    mAdapter = new StandardCellAdapter(getContext(), mData, 1,webTable);
                    mListView.setAdapter(mAdapter);
                } catch (IOException e) {
                    e.printStackTrace();
                }
                swipeLayout.setRefreshing(false);
            }
        });
        return view;
    }

    private void setupSearchView() {
        mSearchView.setOnQueryTextListener(this);
        mSearchView.setIconifiedByDefault(true);
    }

    private ArrayList<InfoArticle> getData() throws IOException {
        SharedPreferences sharedPref = PreferenceManager.getDefaultSharedPreferences(getContext());
        int school = sharedPref.getInt("School", 14273);
        HTMLPull Connection = new HTMLPull();
        Connection.getStaff(school);
        Connection.Results.remove(0);
        return Connection.Results;
    }

    @Override
    public boolean onQueryTextChange(String newText) {

        if (TextUtils.isEmpty(newText)) {
            mListView.clearTextFilter();
        } else {
            mListView.setFilterText(newText);
        }
        return true;
    }

    public ArrayList<InfoArticle> toData(ArrayList<String> t, ArrayList<String> d) {
        ArrayList<InfoArticle> temp = new ArrayList<InfoArticle>();
        if (t.size() == 0) {
            temp.add(new InfoArticle("Slide to Save Teachers", "google.com"));
        } else {
            for (int i = 0; i < t.size(); i++) {
                temp.add(new InfoArticle(t.get(i), d.get(i)));
            }
        }
        return temp;
    }


    @Override
    public boolean onQueryTextSubmit(String query) {
        return false;
    }
    private void toggleView(){
        if (!toggle) {
            SharedPreferences sharedPref = PreferenceManager.getDefaultSharedPreferences(getContext());
            HashSet<String> defv = new HashSet<String>();
            ArrayList<String> teachers = new ArrayList<String>(sharedPref.getStringSet("teachPref", defv));
            ArrayList<String> links = new ArrayList<String>(sharedPref.getStringSet("linkPref", defv));
            mAdapter = new StandardCellAdapter(getContext(), toData(teachers, links),2,this);
            mListView.setAdapter(mAdapter);
            toggle = true;
        } else {
            mAdapter = new StandardCellAdapter(getContext(), mData, 1,this);
            mListView.setAdapter(mAdapter);
            toggle = false;
        }
    }
    /**public void displayWebpage(int position){
        if (toggle == true) {
            WebsiteDisplay fullView = WebsiteDisplay.newInstance(mAdapter.getItem(position).description);
            FragmentTransaction transfer = getActivity().getSupportFragmentManager().beginTransaction();
            transfer.replace(R.id.fragmentcontainer, fullView).addToBackStack("tag").commit();
        } else {
            if (!mSearchView.isIconified()) {
                for (InfoArticle a : fDataSet) {

                    if (a.title.equals(((InfoArticle) mListView.getAdapter().getItem(position)).title)) {
                        WebsiteDisplay fullView = WebsiteDisplay.newInstance(a.description);
                        FragmentTransaction transfer = getActivity().getSupportFragmentManager().beginTransaction();
                        transfer.replace(R.id.fragmentcontainer, fullView).addToBackStack("tag").commit();
                    }
                }
            } else {
                WebsiteDisplay fullView = WebsiteDisplay.newInstance(fDataSet.get(position).description);
                FragmentTransaction transfer = getActivity().getSupportFragmentManager().beginTransaction();
                transfer.replace(R.id.fragmentcontainer, fullView).addToBackStack("tag").commit();
            }
        }
    }*/
    public void displayWebpage(String Link){
        WebsiteDisplay fullView = WebsiteDisplay.newInstance(Link);
        FragmentTransaction transfer = getActivity().getSupportFragmentManager().beginTransaction();
        transfer.replace(R.id.fragmentcontainer, fullView).addToBackStack("tag").commit();
    }
}

CellAdapter

package layout;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.SharedPreferences;
import android.media.Image;
import android.nfc.Tag;
import android.support.v4.app.FragmentTransaction;
import android.support.v7.widget.RecyclerView;
import android.widget.ArrayAdapter;
import android.content.Context;
import android.view.View;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.Set;
import android.preference.PreferenceManager;
import android.widget.ImageView;
import android.widget.TextView;
import android.view.LayoutInflater;
import android.view.ViewGroup;
import com.chauthai.swipereveallayout.SwipeRevealLayout;
import com.tble.brgo.InfoArticle;
import com.tble.brgo.R;
import android.graphics.Typeface;
import android.widget.Filterable;
import android.widget.Filter;

import org.w3c.dom.Text;

/**
 * Created by Praveen on 8/21/16.
 */
public class StandardCellAdapter extends ArrayAdapter<InfoArticle> implements Filterable {
    public ArrayList<InfoArticle> orig;
    public ArrayList<InfoArticle> Teachers;
    public SwipeRevealLayout swipeV;
    public TextView deleteButton;
    public TextView saveButton;
    public int tableType;
    public displayInterface activity;
    public Context ct;
    public StandardCellAdapter(Context context, ArrayList<InfoArticle> titles, int tableType, displayInterface inter) {
        super(context, 0, titles);
        this.Teachers = titles;
        this.tableType = tableType;
        saveButton = new TextView(context);
        deleteButton = new TextView(context);
        activity = inter;
        ct = context;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        // Get the data item for this position
        String title = getItem(position).title;
        String desc = getItem(position).description;
        Holder TagHolder = null;
        TextView Ctitle;
        // Check if an existing view is being reused, otherwise inflate the view
        if (convertView == null) {
            if (tableType == 0) {
                convertView = LayoutInflater.from(getContext()).inflate(R.layout.nclayout, parent, false);
                Ctitle = (TextView) convertView.findViewById(R.id.cellTitle);
            }
            else if(tableType == 1){
                convertView = LayoutInflater.from(getContext()).inflate(R.layout.sclayout, parent, false);
                Ctitle = (TextView) convertView.findViewById(R.id.cellTitle);
                TagHolder = new Holder();
                swipeV = (SwipeRevealLayout)convertView.findViewById(R.id.scSwipe);
                saveButton = (TextView)convertView.findViewById(R.id.saveButton);
                TagHolder.Save = saveButton;
                TagHolder.Cell = Ctitle;
                convertView.setTag(TagHolder);
            }
            else{
                convertView = LayoutInflater.from(getContext()).inflate(R.layout.tclayout, parent, false);
                Ctitle = (TextView) convertView.findViewById(R.id.cellTitle);
                TagHolder = new Holder();
                swipeV = (SwipeRevealLayout)convertView.findViewById(R.id.tcSwipe);
                deleteButton = (TextView) convertView.findViewById(R.id.deleteButton);
                TagHolder.Delete = deleteButton;
                TagHolder.Cell = Ctitle;
                convertView.setTag(TagHolder);
            }
        }
        else {
            TagHolder = (Holder) convertView.getTag();
            Ctitle = (TextView) convertView.findViewById(R.id.cellTitle);
        }
        if(tableType == 1) {
            TagHolder.Save.setTag(position);
            TagHolder.Save.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    saveTeacher((int)v.getTag());
                }
            });
            TagHolder.Cell.setTag(position);
            TagHolder.Cell.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    activity.displayWebpage(getItem((int)v.getTag()).description);
                }
            });
        }
        else if(tableType == 2) {
            TagHolder.Delete.setTag(position);
            deleteButton.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    deleteTeacher((int)v.getTag());
                    if(Teachers.size() == 0)
                        Teachers.add(new InfoArticle("Slide to Save Teachers", "google.com"));
                    notifyDataSetChanged();
                }
            });
            TagHolder.Cell.setTag(position);
            TagHolder.Cell.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    activity.displayWebpage(getItem((int)v.getTag()).description);
                }
            });
        }
        Typeface customFont = Typeface.SERIF;
        Ctitle.setTypeface(customFont);
        Ctitle.setText(title);
        return convertView;
    }
    public Filter getFilter() {
        return new Filter() {

            @Override
            protected FilterResults performFiltering(CharSequence constraint) {
                final FilterResults oReturn = new FilterResults();
                final ArrayList<InfoArticle> results = new ArrayList<InfoArticle>();
                if (orig == null)
                    orig = Teachers;
                if (constraint != null) {
                    if (orig != null && orig.size() > 0) {
                        for (final InfoArticle g : orig) {
                            if (g.title.toLowerCase()
                                    .contains(constraint.toString().toLowerCase())) {
                                results.add(g);
                            }

                        }
                    }
                    oReturn.values = results;
                }
                return oReturn;
            }

            @SuppressWarnings("unchecked")
            @Override
            protected void publishResults(CharSequence constraint,
                                          FilterResults results) {
                Teachers = (ArrayList<InfoArticle>)results.values;
                notifyDataSetChanged();
            }
        };
    }
    @Override
    public void notifyDataSetChanged() {
        super.notifyDataSetChanged();
    }

    public ArrayList<InfoArticle> toIA(ArrayList<String> data){
        ArrayList<InfoArticle> converted = new ArrayList<InfoArticle>();
        for(String a: data)
        {
            converted.add(new InfoArticle(a,""));
        }
        return converted;
    }


    @Override
    public int getCount() {
        return Teachers.size();
    }

    @Override
    public InfoArticle getItem(int position) {
        return Teachers.get(position);
    }

    public void saveTeacher(int position){
        SharedPreferences sharedPref = PreferenceManager.getDefaultSharedPreferences(getContext());
        SharedPreferences.Editor editor = sharedPref.edit();
        Set<String> teach = sharedPref.getStringSet("teachPref", new HashSet<String>());
        teach.add(Teachers.get(position).title);
        Set<String> link = sharedPref.getStringSet("linkPref", new HashSet<String>());
        link.add(Teachers.get(position).description);
        editor.putStringSet("teachPref", teach);
        editor.putStringSet("linkPref", link);
        editor.apply();
        new AlertDialog.Builder(getContext())
                .setTitle("Teacher Saved")
                .setPositiveButton("Ok", new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int which) {
                        // continue with delete
                    }
                }).setIcon(android.R.drawable.ic_dialog_alert)
                .show();
        swipeV.close(true);
    }
    private void deleteTeacher(int position){
        SharedPreferences sharedPref = PreferenceManager.getDefaultSharedPreferences(getContext());
        SharedPreferences.Editor editor = sharedPref.edit();
        Set<String> teach = sharedPref.getStringSet("teachPref", new HashSet<String>());
        Set<String> link = sharedPref.getStringSet("linkPref", new HashSet<String>());
        teach.remove(Teachers.get(position).title);
        link.remove(Teachers.get(position).description);
        editor.putStringSet("teachPref", teach);
        editor.putStringSet("linkPref", link);
        editor.apply();
        HashSet<String> defv = new HashSet<String>();
        Teachers.remove(position);
        new AlertDialog.Builder(getContext())
                .setTitle("Teacher Deleted")
                .setPositiveButton("Ok", new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int which) {
                        // continue with delete
                    }
                }).setIcon(android.R.drawable.ic_dialog_alert)
                .show();
        swipeV.close(false);
    }
    class Holder{
        TextView Delete;
        TextView Save;
        TextView Cell;
    }
}

0 个答案:

没有答案