我需要在我的应用中实现收藏列表。经过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
此代码无效。
答案 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'