我有一个cardView
,其中包含textView
和“赞”按钮。每当按下“喜欢”按钮时,它将在另一个片段中显示cardView
,就像收藏夹一样。
如何使用共享首选项或任何其他方法执行此操作?我这样做是为了更改like按钮的颜色,但不知道如何将cardView
添加到另一个片段:
likeImageView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
int id = (int)likeImageView.getTag();
if( id == R.drawable.ic_like){
likeImageView.setTag(R.drawable.ic_liked);
likeImageView.setImageResource(R.drawable.ic_liked);
Toast.makeText(getActivity(),titleTextView.getText()+" added to favourites",Toast.LENGTH_SHORT).show();
} else {
likeImageView.setTag(R.drawable.ic_like);
likeImageView.setImageResource(R.drawable.ic_like);
Toast.makeText(getActivity(),titleTextView.getText()+" removed from favourites",Toast.LENGTH_SHORT).show();
}
}
});
答案 0 :(得分:0)
在onclick方法中创建SharedPreferences的实例
SharedPreferences prefs = getActivity()。getSharedPreferences( " Preference_reference",Context.MODE_PRIVATE);
使用'喜欢'的名称。 item为键,boolean为类型 或者,如果项目永远不会改变顺序,则可以使用布尔数组作为类型。
保存onclick中共享pref是否喜欢某个项目。
if(id == R.drawable.ic_like){
likeImageView.setTag(R.drawable.ic_liked);
likeImageView.setImageResource(R.drawable.ic_liked);
prefs.edit().putBoolean("Unique id", true).commit();
Toast.makeText(getActivity(),titleTextView.getText()+" added to
favourites",Toast.LENGTH_SHORT).show();
}else{
likeImageView.setTag(R.drawable.ic_like);
likeImageView.setImageResource(R.drawable.ic_like);
prefs.edit().putBoolean("Unique id", false).commit();
Toast.makeText(getActivity(),titleTextView.getText()+" removed from favourites",Toast.LENGTH_SHORT).show();
}
在片段中,如果喜欢,则要显示项目,创建另一个SharedPreferences变量并使用它来初始化片段,以便显示其键值设置为true的任何项目。
if(prefs.getBoolean(" Unique Id",false)){Show card}
您可以找到有关如何使用SharedPreferences的大量资源,因此我将代码保持在最低限度
答案 1 :(得分:0)
1-)存储数据
据我所知,你想在本地保留喜欢的内容。我们来探索Android Storage Options。
Android提供了几种保存持久性的选项 申请数据。您选择的解决方案取决于您的具体情况 需求,例如数据是否应该是您的应用程序的私有 或者可以访问其他应用程序(和用户)以及多少空间 您的数据需要。
您的数据存储选项如下:
- 共享首选项:将私有原始数据存储在键值对中。
- 内部存储:将私有数据存储在设备内存中。外耳炎
- 存储:将公共数据存储在共享外部存储上。
- SQLite数据库:将结构化数据存储在私有数据库中。
- 网络连接:使用您自己的网络服务器在网络上存储数据
其他选项似乎不适合您的情况,所以我继续使用SharedPreferences和SQLite。
<强> SQLite的强>
大量相同的结构化数据应该存储在SQLite数据库中,因为数据库是为这种数据设计的。 由于数据是由数据库构建和管理的,因此可以查询使用SQL等查询语言获取与某些条件匹配的数据子集。 这使得可以搜索数据。 当然,管理和搜索大量数据会影响性能,因此从数据库读取数据可能比从SharedPreferences读取数据要慢。
<强> SharedPreferences 强>
SharedPreferences是一个键/值存储,您可以在其中保存特定键下的数据。 要从商店读取数据,您必须知道数据的密钥。这使得读取数据非常容易。 但是,由于存储和读取大型结构化数据很困难,因为存储和读取大量结构化数据很容易,因为您需要为每个数据定义密钥, 此外,除了您有一个命名键的特定概念之外,您无法真正搜索数据。
关于SQLite和SharedPreferences的more。
所以你应该使用SQLite而不是SharedPreferences,因为你会存储多个像。这是关于如何使用SQLite的伟大tutorial。
另外,我建议你使用这些库(LikeButton和LikeAnimation)让你的喜欢更漂亮。
2-)阅读并显示数据
我想你已经准备好了你的SQLite数据库并且你已经在那里成功注册了数据。 以后会容易得多。 从数据库中读取数据并将其显示在相关片段中。
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_like,
container, false);
//accessing database
MySQLiteOpenHelper db = new MySQLiteOpenHelper(getActivity());
//get all likes from database.
//getAllLikes is a method that returns the likes you have stored in the database, as list.
//You must write methods to write likes into the database and read from the database.
List<MyLikeObject> likeList = new ArrayList<MyLikeObject>();
likeList = db.getAllLikes();
//find RecyclerView
RecyclerView recyclerView = (RecyclerView) view.findViewById(R.id.rvLike);
//set layoutManger
recyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));
//create an adapter
MyAdapter mAdapter = new MyAdapter(likeList);
//set adapter
recyclerView.setAdapter(mAdapter);
return view;
}
答案 2 :(得分:0)
Like_btn.setOnClickListener(new OnClickListener()
{
**private boolean fun = true;**
public void onClick(View v)
{
if(fun)
{
Like_btn.setImageResource(R.drawable.unlike);
fun=false;
}
else
{
fun=true;
Like_btn.setImageResource(R.drawable.like);
Toast.makeText(getApplicationContext(), "Changed", Toast.LENGTH_LONG).show();
}
}
});