Android 在列表视图中添加收藏夹按钮
我有一个Android 在列表视图中添加收藏夹按钮,android,android-listview,sharedpreferences,baseadapter,Android,Android Listview,Sharedpreferences,Baseadapter,我有一个listview,它为每个列表项都有一个收藏夹按钮,单击该按钮时,应该将列表项添加到另一个名为my fav9rites的活动中。我将Baseadapter用于listview和SharedReference用于添加收藏夹。 单击“收藏夹”按钮时,列表视图项将添加到“我的收藏夹”活动中,但我面临以下问题: 1) 单击“收藏夹”按钮时应变暗,表示列表项已添加到收藏夹中。这种情况会发生,但当我关闭活动并再次返回时,按钮会恢复,而不是变暗 2) 在“我的收藏夹”活动中长按列表项时,列表项应从收藏
listview
,它为每个列表项都有一个收藏夹按钮,单击该按钮时,应该将列表项添加到另一个名为my fav9rites的活动中。我将Baseadapter
用于listview
和SharedReference
用于添加收藏夹。
单击“收藏夹”按钮时,列表视图项将添加到“我的收藏夹”活动中,但我面临以下问题:
1) 单击“收藏夹”按钮时应变暗,表示列表项已添加到收藏夹中。这种情况会发生,但当我关闭活动并再次返回时,按钮会恢复,而不是变暗
2) 在“我的收藏夹”活动中长按列表项时,列表项应从收藏夹中删除,但不会发生这种情况
希望大家能理解我的问题
我的代码
我的基本适配器
public View getView(final int position, View view, ViewGroup parent)
{
final ViewHolder holder;
if(view == null){
holder = new ViewHolder();
view = inflater.inflate(R.layout.beg_list_item,null);
holder.listHeading = (TextView) view.findViewById(R.id.beg_list_itemTextView);
// holder.listHash = (TextView) view.findViewById(R.id.listview_hashtags);
holder.alphabetList = (ImageView) view.findViewById(R.id.beg_list_itemImageView);
holder.favoriteImg = (ImageView) view.findViewById(R.id.favbtn);
view.setTag(holder);
}else{
holder = (ViewHolder) view.getTag();
}
CodeList code = (CodeList) getItem(position);
holder.listHeading.setText(codeList.get(position).getListHeading());
imageLoader.DisplayImage(codeList.get(position).getAlphabetimg(),
holder.alphabetList);
// holder.listHash.setText(codeList.get(position).getListHashTags());
if (checkFavoriteItem(code)) {
holder.favoriteImg.setImageResource(R.drawable.favorite);
holder.favoriteImg.setTag("yes");
} else {
holder.favoriteImg.setImageResource(R.drawable.unfavorite);
holder.favoriteImg.setTag("no");
}
view.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View arg0){
Intent intent = new Intent(context, SingleItemView.class);
//intent.putExtra("listheading",
// (codeList.get(position).getListHeading()));
//intent.putExtra("alphabetimg",
// (codeList.get(position).getAlphabetimg()));
intent.putExtra("demovideo",
(codeList.get(position).getDailogdemovideo()));
intent.putExtra("download",
(codeList.get(position).getDownloadCode()));
// Start SingleItemView Class
context.startActivity(intent);
}
});
final ImageView favoritesbutton = (ImageView) view.findViewById(R.id.favbtn);
favoritesbutton.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v){
String tag = favoritesbutton.getTag().toString();
if(tag.equalsIgnoreCase("no")){
shrdPrefence.addFavorite(context, codeList.get(position));
Toast.makeText(context, R.string.fav_added, Toast.LENGTH_SHORT).show();
favoritesbutton.setTag("yes");
favoritesbutton.setImageResource(R.drawable.favorite);
}else{
shrdPrefence.removeFavorite(context, codeList.get(position));
favoritesbutton.setTag("no");
favoritesbutton.setImageResource(R.drawable.unfavorite);
Toast.makeText(context, R.string.fav_removed, Toast.LENGTH_SHORT).show();
}
}
});
return view;
}
//Checks whether a particular product exists in SharedPreferences*/
public boolean checkFavoriteItem(CodeList checkCode) {
boolean check = false;
List<CodeList> favorites = shrdPrefence.getFavorites(context);
if (favorites != null) {
for (CodeList code : favorites) {
if (code.equals(checkCode)) {
check = true;
break;
}
}
}
return check;
}
public void add(CodeList code) {
codeList.add(code);
notifyDataSetChanged();
}
public void remove(CodeList code) {
codeList.remove(code);
notifyDataSetChanged();
}
public View getView(最终int位置、视图视图、视图组父视图)
{
最终持票人;
如果(视图==null){
holder=新的ViewHolder();
视图=充气机。充气(R.layout.beg\u列表项,空);
holder.listHeading=(TextView)view.findViewById(R.id.beg\u list\u itemTextView);
//holder.listHash=(TextView)view.findViewById(R.id.listview\u hashtags);
holder.alphabetList=(ImageView)view.findViewById(R.id.beg\u list\u itemImageView);
holder.favoriteImg=(ImageView)view.findViewById(R.id.favbtn);
视图.设置标签(支架);
}否则{
holder=(ViewHolder)view.getTag();
}
代码列表代码=(代码列表)getItem(位置);
holder.listHeading.setText(codeList.get(position.getListHeading());
imageLoader.DisplayImage(codeList.get(position).GetAlphaoMg(),
持有人(字母表);
//holder.listHash.setText(codeList.get(position.getListHashTags());
if(检查收藏夹项目(代码)){
holder.favoriteImg.setImageResource(R.drawable.favorite);
holder.favoriteImg.setTag(“是”);
}否则{
持有者.favoriteImg.setImageResource(R.drawable.Favorite);
持票人优先股集合标签(“编号”);
}
view.setOnClickListener(新的OnClickListener(){
@凌驾
公共void onClick(视图arg0){
意向意向=新意向(上下文,SingleItemView.class);
//intent.putExtra(“列表标题”,
//(codeList.get(position.getListHeading());
//intent.putExtra(“字母mg”,
//(codeList.get(position.getAlphaoMg());
intent.putExtra(“演示视频”,
(codeList.get(position.getDailogdemovideo());
intent.putExtra(“下载”,
(codeList.get(position.getDownloadCode());
//启动SingleItemView类
背景。开始触觉(意图);
}
});
最终ImageView收藏夹按钮=(ImageView)view.findViewById(R.id.favbtn);
setOnClickListener(新的OnClickListener(){
@凌驾
公共void onClick(视图v){
String tag=favoritesbutton.getTag().toString();
if(标记为“否”){
shrdPrefence.addFavorite(context,codeList.get(position));
Toast.makeText(context,添加了R.string.fav_,Toast.LENGTH_SHORT.show();
setTag(“是”);
setImageResource(R.drawable.favorite);
}否则{
removeFavorite(上下文,代码列表,get(位置));
favoritesbutton.setTag(“否”);
favoritesbutton.setImageResource(R.drawable.Favorite);
Toast.makeText(上下文,删除R.string.fav_,Toast.LENGTH_SHORT).show();
}
}
});
返回视图;
}
//检查SharedReferences中是否存在特定产品*/
公共布尔checkFavoriteItem(代码列表checkCode){
布尔检查=假;
List favorites=shrdReference.getFavorites(上下文);
如果(收藏夹!=null){
用于(代码列表代码:收藏夹){
if(代码等于(检查代码)){
检查=正确;
打破
}
}
}
退货检查;
}
公共无效添加(代码列表代码){
代码列表。添加(代码);
notifyDataSetChanged();
}
公共无效删除(代码列表代码){
代码列表。删除(代码);
notifyDataSetChanged();
}
SharedReference.java
public class SharedPreference
{
public static final String PREFS_NAME = "MY_APP";
public static final String FAVORITES = "code_Favorite";
public SharedPreference(){
super();
}
public void saveFavorites(Context context, List<CodeList> favorites){
SharedPreferences settings;
Editor editor;
settings = context.getSharedPreferences(PREFS_NAME,
Context.MODE_PRIVATE);
editor = settings.edit();
Gson gson = new Gson();
String jsonFavorites = gson.toJson(favorites);
editor.putString(FAVORITES, jsonFavorites);
editor.commit();
}
public void addFavorite(Context context, CodeList code){
List<CodeList> favorites = getFavorites(context);
if(favorites == null)
favorites = new ArrayList<CodeList>();
favorites.add(code);
saveFavorites(context,favorites);
}
public void removeFavorite(Context context, CodeList code) {
ArrayList<CodeList> favorites = getFavorites(context);
if (favorites != null) {
favorites.remove(code);
saveFavorites(context, favorites);
}
}
public ArrayList<CodeList> getFavorites(Context context) {
SharedPreferences settings;
List<CodeList> favorites;
settings = context.getSharedPreferences(PREFS_NAME,
Context.MODE_PRIVATE);
if (settings.contains(FAVORITES)) {
String jsonFavorites = settings.getString(FAVORITES, null);
Gson gson = new Gson();
CodeList[] favoriteItems = gson.fromJson(jsonFavorites,
CodeList[].class);
favorites = Arrays.asList(favoriteItems);
favorites = new ArrayList<CodeList>(favorites);
} else
return null;
return (ArrayList<CodeList>) favorites;
}
}
public class MyFavActivity extends Activity
{
SharedPreference shrdPrfence;
List<CodeList> favorites;
FinalAdapter fnlAdpter;
Context context = this.context;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.fav_layout);
shrdPrfence = new SharedPreference();
favorites = shrdPrfence.getFavorites(MyFavActivity.this);
if(favorites == null){
Dialog dialog = new Dialog(MyFavActivity.this);
dialog.setTitle(R.string.nofav_title);
dialog.show();
}else{
if(favorites.size() == 0){
Dialog dialog = new Dialog(MyFavActivity.this);
dialog.setTitle(R.string.nofav_title);
dialog.show();
}
ListView favList = (ListView) findViewById(R.id.fav_layoutListView);
if(favorites != null){
fnlAdpter = new FinalAdapter(MyFavActivity.this, favorites);
favList.setAdapter(fnlAdpter);
favList.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View arg1,
int position, long arg3) {
}
});
favList.setOnItemLongClickListener(new OnItemLongClickListener() {
@Override
public boolean onItemLongClick(AdapterView<?> parent, View view,
int position, long id) {
ImageView button = (ImageView) view
.findViewById(R.id.favbtn);
String tag = button.getTag().toString();
if (tag.equalsIgnoreCase("no")) {
shrdPrfence.addFavorite(MyFavActivity.this,
favorites.get(position));
Toast.makeText(
MyFavActivity.this,
R.string.fav_added,
Toast.LENGTH_SHORT).show();
button.setTag("yes");
button.setImageResource(R.drawable.favorite);
} else {
shrdPrfence.removeFavorite(MyFavActivity.this,
favorites.get(position));
button.setTag("no");
button.setImageResource(R.drawable.unfavorite);
fnlAdpter.remove(favorites.get(position));
Toast.makeText(
MyFavActivity.this,
R.string.fav_removed,
Toast.LENGTH_SHORT).show();
}
return true;
}
});
}
}
}
}
公共类共享引用
{
公共静态最终字符串PREFS_NAME=“MY_APP”;
public static final String FAVORITES=“code\u Favorite”;
公共共享引用(){
超级();
}
公共void保存收藏夹(上下文、列表收藏夹){
共享引用设置;
编辑;
设置=context.getSharedReferences(首选名称,
上下文。模式(私人);
editor=settings.edit();
Gson Gson=新的Gson();
字符串jsonFavorites=gson.toJson(收藏夹);
putString(收藏夹,jsonFavorites);
commit();
}
公共void addFavorite(上下文上下文、代码列表代码){
列表收藏夹=获取收藏夹(上下文);
如果(收藏夹==null)
收藏夹=新的ArrayList();
收藏夹。添加(代码);
保存收藏夹(上下文、收藏夹);
}
public void removeFavorite(上下文上下文、代码列表代码){
ArrayList favorites=getFavorites(上下文);
如果(收藏夹!=null){
收藏夹。删除(代码);
保存收藏夹(上下文、收藏夹);
}
}
公共ArrayList getFavorites(上下文){
共享引用设置;
列出收藏夹;
塞蒂
gson.fromJson(jsonFavorites, CodeList[].class);
gson.fromJson(jsonFavorites,new TypeToken<ArrayList<CodeList>>() {}.getType());