在app中制作优惠列表的SharedPreferences

时间:2016-05-24 12:38:39

标签: android json

我需要在我的应用中实现收藏列表。经过4天的搜索和其他问题,我得到了我应该使用数据库制作收藏列表(我的程序用json填充recyclerviews)。

然后将json保存到数据库工作,我可以点击一下将json添加到数据库并显示带有数据库数据的收藏列表。

正如我之前所说,我将json保存到数据库以获得最喜欢的列表。

现在我遇到一个问题,如何显示此行是否已添加到收藏夹列表中? 换句话说,我想显示实心图标,如果该行添加到收藏夹列表并显示边框心形图标,如果该行未添加到收藏列表中。

我认为,对于这项工作,我需要使用SharedPreferences

  

这是我的PreferenceHelper类:

public class PreferenceHelper {

    private static final String NAME = "MY_PREFERENCES";
    public static final String MY_DATA = "myData";

    private SharedPreferences sharedPreferences;

    public PreferenceHelper(Context context) {
        sharedPreferences = context.getSharedPreferences(NAME,Context.MODE_PRIVATE);
    }

    public boolean getBoolean(String key){
        return sharedPreferences.getBoolean(key,false);
    }

    public void putBoolean(String key, boolean value){
        SharedPreferences.Editor editor = sharedPreferences.edit();
        editor.putBoolean(key, value);
        editor.commit();
    }
}
  

这是我onBindViewHolder的{​​{1}}:

AdapterRecyclerQuestion

此代码无效。

1 个答案:

答案 0 :(得分:0)

如果要实现收藏列表。你应该保存SQLite中的所有数据,你也可以将它保存到后端,并将其添加到收藏夹中。
我实现了这个简单的演示应用程序。

MainActivity.java

public class MainActivity extends AppCompatActivity {
private RecyclerView recyclerView;
List<Movie>movieList= new ArrayList<>();
private MoviesAdapter mAdapter;

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

    recyclerView = (RecyclerView) findViewById(R.id.recycler_view);

    for(int i=0;i<=20;i++){
        movieList.add(new Movie("Title"+i,false));
    }

    mAdapter = new MoviesAdapter(movieList, MainActivity.this, new myClickListner() {
        @Override
        public void onItemClick(Movie obj, int pos) {
            if (obj.isFav()){
                obj.setFav(false);
                mAdapter.notifyDataSetChanged();// Here you can save this item's state to the preference or sqlite. 
            }else {
                obj.setFav(true);
                mAdapter.notifyDataSetChanged();
  // Here you can save this item's state to the preference or sqlite. 
            }

        }
    });
    RecyclerView.LayoutManager mLayoutManager = new LinearLayoutManager(getApplicationContext());
    recyclerView.setLayoutManager(mLayoutManager);
    recyclerView.setItemAnimator(new DefaultItemAnimator());
    recyclerView.setAdapter(mAdapter);

}

}

Movie.java

/**
 * Created by droidwithme on 24/05/16.
 */
public class Movie {
    private String title;

    public boolean isFav() {
        return isFav;
    }

    public void setFav(boolean fav) {
        isFav = fav;
    }

    private boolean isFav;

    public Movie() {
    }

    public Movie(String title, boolean flag) {
        this.title = title;
        this.isFav=flag;

    }

    public String getTitle() {
        return title;
    }

    public void setTitle(String name) {
        this.title = name;
    }


    }

适配器的代码。

public class MoviesAdapter extends RecyclerView.Adapter<MoviesAdapter.MyViewHolder> {

private List<Movie> moviesList;
private Context context;
myClickListner myClickListner;

public class MyViewHolder extends RecyclerView.ViewHolder {
    public TextView title;
    public ImageView imgFav;
    public MyViewHolder(View view) {
        super(view);
        title = (TextView) view.findViewById(R.id.title);
       imgFav=(ImageView)view.findViewById(R.id.imageFav);
    }
}


public MoviesAdapter(List<Movie> moviesList, AppCompatActivity activity,myClickListner listner) {
    this.moviesList = moviesList;
    this.context=activity;
    this.myClickListner=listner;
}

@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    View itemView = LayoutInflater.from(parent.getContext())
            .inflate(R.layout.row_item, parent, false);

    return new MyViewHolder(itemView);
}

@Override
public void onBindViewHolder(final MyViewHolder holder, final int position) {
    final Movie movie = moviesList.get(position);
    holder.title.setText(movie.getTitle());
    holder.imgFav.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            myClickListner.onItemClick(movie,position);
        }
    });
    if (movie.isFav()){
        holder.imgFav.setImageDrawable(context.getResources().getDrawable(R.drawable.redheart));
    }else {
        holder.imgFav.setImageDrawable(context.getResources().getDrawable(R.drawable.whiteheart));
    }




}

@Override
public int getItemCount() {
    return moviesList.size();
}
}

点击界面(有助于检测MainActivity中的点击次数 myClickListner.java

    public interface myClickListner {
   void onItemClick(Movie obj,int pos);
}

main.xml中

    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <android.support.v7.widget.RecyclerView
        android:id="@+id/recycler_view"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:scrollbars="vertical" />

   </RelativeLayout>

row_item.xml

<?xml version="1.0" encoding="utf-8"?>

<RelativeLayout
    android:layout_width="match_parent"
    android:orientation="horizontal"
    android:layout_height="wrap_content">

<TextView
    android:layout_width="match_parent"
    android:layout_weight="1"
    android:text="Title"
    android:textSize="20dp"
    android:id="@+id/title"
    android:textStyle="bold"
    android:layout_height="wrap_content" />

    <ImageView
        android:layout_width="50dp"
        android:layout_weight="1"
        android:id="@+id/imageFav"
        android:layout_marginTop="5dp"
        android:layout_height="50dp"
        android:clickable="true"
        android:src="@drawable/whiteheart"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true" />
</RelativeLayout>

</android.support.v7.widget.CardView>

和所需的依赖项

compile 'com.android.support:appcompat-v7:23.3.0'
compile 'com.android.support:recyclerview-v7:23.1.1'
compile 'com.android.support:cardview-v7:23.0.0'