【发布时间】:2016-01-13 09:01:13
【问题描述】:
我有一个列表视图,我正在使用swipe list view 库向列表视图添加滑动功能。最初,如果我长按列表项,该列表项将被添加到我的收藏夹中。我想通过滑动菜单项单击来实现添加到收藏夹的过程,而不是长按。但我不确定如何实现它
我的 onitemlongclick 代码
public boolean onItemLongClick(AdapterView<?> arg0, View view, int position, long arg3)
{
ImageView fvrtebutton = (ImageView) view.findViewById(R.id.favbtn);
String tag = fvrtebutton.getTag().toString();
if (tag.equalsIgnoreCase("no")) {
shrdPreference.addFavorite(InterActivity.this, codelist.get(position));
Toast.makeText(InterActivity.this, getString(R.string.fav_added),
Toast.LENGTH_SHORT).show();
fvrtebutton.setTag("yes");
fvrtebutton.setImageResource(R.drawable.favorite);
} else {
shrdPreference.removeFavorite(InterActivity.this, codelist.get(position));
fvrtebutton.setTag("no");
fvrtebutton.setImageResource(R.drawable.unfavorite);
Toast.makeText(InterActivity.this,
getString(R.string.fav_removed),
Toast.LENGTH_SHORT).show();
}
Log.v("long clicked", "pos: " + position);
return false;
}
我的滑动菜单项及其 onclick
SwipeMenuCreator creator = new SwipeMenuCreator() {
@Override
public void create(SwipeMenu menu) {
// create "open" item
SwipeMenuItem openItem = new SwipeMenuItem(InterActivity.this);
// set item background
openItem.setBackground(new ColorDrawable(Color.rgb(0xC9, 0xC9,
0xCE)));
// set item width
openItem.setWidth(dp2px(90));
// set item title
openItem.setTitle("Open");
// set item title fontsize
openItem.setTitleSize(18);
// set item title font color
openItem.setTitleColor(Color.WHITE);
// add to menu
menu.addMenuItem(openItem);
// create "delete" item
SwipeMenuItem favoriteItem = new SwipeMenuItem(InterActivity.this);
// set item background
favoriteItem.setBackground(new ColorDrawable(Color.rgb(0xF9,
0x3F, 0x25)));
// set item width
favoriteItem.setWidth(dp2px(90));
// set a icon
favoriteItem.setIcon(R.drawable.unfavorite);
// add to menu
menu.addMenuItem(favoriteItem);
}
};
// set creator
listview.setMenuCreator(creator);
listview.setOnMenuItemClickListener(new SwipeMenuListView.OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(int position, SwipeMenu menu, int index) {
//ApplicationInfo item = mAppList.get(position);
switch (index) {
case 0:
// open
//open(item);
break;
case 1:
// favorite
if(favoriteItem.getIcon().equals(getResources().getDrawable(R.drawable.unfavorite))){
Toast.makeText(InterActivity.this, "yes", Toast.LENGTH_SHORT).show();
}
break;
}
return false;
}
});
无法将 getTag() 应用于滑动菜单项 甚至尝试使用 equals() 比较 drawable 但得到一个空指针异常
我的适配器的getview()
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.favariteImage = (ImageView) view.findViewById(R.id.favbtn);
view.setTag(holder);
}else{
holder = (ViewHolder) view.getTag();
}
CodeList codes = (CodeList) getItem(position);
holder.listHeading.setText(codeList.get(position).getListHeading());
holder.listHash.setText(codeList.get(position).getListHashText());
imageLoader.DisplayImage(codeList.get(position).getAlphabetimg(),
holder.alphabetList);
if (checkFavoriteItem(codes)) {
holder.favariteImage.setImageResource(R.drawable.favorite);
holder.favariteImage.setTag("yes");
} else {
holder.favariteImage.setImageResource(R.drawable.unfavorite);
holder.favariteImage.setTag("no");
}
return view;
}
public boolean checkFavoriteItem(CodeList checkCodes) {
boolean check = false;
List<CodeList> favorites = shrdprfrnce.getFavorites(context);
if (favorites != null) {
for (CodeList codes : favorites) {
if (codes.equals(checkCodes)) {
check = true;
break;
}
}
}
return check;
}
这是我试过的方法
public boolean onMenuItemClick(int position, SwipeMenu menu, int index) {
//ApplicationInfo item = mAppList.get(position);
switch (index) {
case 0:
// open
//open(item);
break;
case 1:
// favorite
CodeList codes = (CodeList) getItem(position);
ImageView fvrtebutton= (ImageView) findViewById(R.id.favbtn);
if (checkFavoriteItem(codes)){
shrdPreference.removeFavorite(InterActivity.this, codelist.get(position));
fvrtebutton.setTag("no");
favoriteItem.setIcon(R.drawable.unfavorite);
fvrtebutton.setImageResource(R.drawable.unfavorite);
Toast.makeText(InterActivity.this,
getString(R.string.fav_removed),
Toast.LENGTH_SHORT).show();
}else{
shrdPreference.addFavorite(InterActivity.this, codelist.get(position));
Toast.makeText(InterActivity.this, getString(R.string.fav_added),
Toast.LENGTH_SHORT).show();
fvrtebutton.setTag("yes");
fvrtebutton.setImageResource(R.drawable.favorite);
favoriteItem.setIcon(R.drawable.favorite);
}
break;
}
return false;
}
private boolean checkFavoriteItem(CodeList checkCodes) {
boolean check = false;
List<CodeList> favorites = shrdPreference.getFavorites(InterActivity.this);
if (favorites != null) {
for (CodeList codes : favorites) {
if (codes.equals(checkCodes)) {
check = true;
break;
}
}
}
return check;
}
private Object getItem(int position)
{
return codelist.get(position);
}
});
我的第 230 行是
favoriteItem.setIcon(R.drawable.favorite)
我的日志猫
13 15:46:21.801 4689 4689 E AndroidRuntime 致命异常:main 01-13 15:46:21.801 4689 4689 E AndroidRuntime 进程: com.enlightenme.pac,PID:4689 01-13 15:46:21.801 4689 4689 E AndroidRuntime java.lang.NullPointerException:尝试调用虚拟方法'void com.baoyz.swipemenulistview.SwipeMenuItem.setIcon(int)' 为空 对象引用 01-13 15:46:21.801 4689 4689 E AndroidRuntime 位于 com.enlightenme.pac.InterActivity$RemoteDataTask$100000001.onMenuItemClick(InterActivity.java:230) 01-13 15:46:21.801 4689 4689 E AndroidRuntime 在 com.baoyz.swipemenulistview.SwipeMenuListView$100000000.onItemClick(SwipeMenuListView.java:78) 01-13 15:46:21.801 4689 4689 E AndroidRuntime 在 com.baoyz.swipemenulistview.SwipeMenuView.onClick(SwipeMenuView.java:85) 01-13 15:46:21.801 4689 4689 E AndroidRuntime 在 android.view.View.performClick(View.java:4780) 01-13 15:46:21.801 4689 4689 E AndroidRuntime 在 android.view.View$PerformClick.run(View.java:19866) 01-13 15:46:21.801 4689 4689 E AndroidRuntime 在 android.os.Handler.handleCallback(Handler.java:739) 01-13 15:46:21.801 4689 4689 E AndroidRuntime 在 android.os.Handler.dispatchMessage(Handler.java:95) 01-13 15:46:21.801 4689 4689 E AndroidRuntime 在 android.os.Looper.loop(Looper.java:135) 01-13 15:46:21.801 4689 4689 E AndroidRuntime 在 android.app.ActivityThread.main(ActivityThread.java:5254) 01-13 15:46:21.801 4689 4689 E AndroidRuntime 在 java.lang.reflect.Method.invoke(Native Method) 01-13 15:46:21.801 4689 4689 E AndroidRuntime 在 java.lang.reflect.Method.invoke(Method.java:372) 01-13 15:46:21.801 4689 4689 E AndroidRuntime 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903) 01-13 15:46:21.801 4689 4689 E AndroidRuntime 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698) 01-13 15:46:21.796 4689 4689 D AndroidRuntime 关闭 VM 01-13 15:46:21.801 4689 4689 E AndroidRunti13 15:46:21.801 4689 4689 E AndroidRuntime 致命例外:主要 01-13 15:46:21.801 4689 4689 E AndroidRuntime 过程: com.enlightenme.pac,PID:4689 01-13 15:46:21.801 4689 4689 E AndroidRuntime java.lang.NullPointerException: 尝试调用虚拟方法 'void com.baoyz.swipemenulistview.SwipeMenuItem.setIcon(int)' 为空 对象引用 01-13 15:46:21.801 4689 4689 E AndroidRuntime 在 com.enlightenme.pac.InterActivity$RemoteDataTask$100000001.onMenuItemClick(InterActivity.java:230) 01-13 15:46:21.801 4689 4689 E AndroidRuntime 在 com.baoyz.swipemenulistview.SwipeMenuListView$100000000.onItemClick(SwipeMenuListView.java:78) 01-13 15:46:21.801 4689 4689 E AndroidRuntime 在 com.baoyz.swipemenulistview.SwipeMenuView.onClick(SwipeMenuView.java:85) 01-13 15:46:21.801 4689 4689 E AndroidRuntime 在 android.view.View.performClick(View.java:4780) 01-13 15:46:21.801 4689 4689 E AndroidRuntime 在 android.view.View$PerformClick.run(View.java:19866) 01-13 15:46:21.801 4689 4689 E AndroidRuntime 在 android.os.Handler.handleCallback(Handler.java:739) 01-13 15:46:21.801 4689 4689 E AndroidRuntime 在 android.os.Handler.dispatchMessage(Handler.java:95) 01-13 15:46:21.801 4689 4689 E AndroidRuntime 在 android.os.Looper.loop(Looper.java:135) 01-13 15:46:21.801 4689 4689 E AndroidRuntime 在 android.app.ActivityThread.main(ActivityThread.java:5254) 01-13 15:46:21.801 4689 4689 E AndroidRuntime 在 java.lang.reflect.Method.invoke(Native Method) 01-13 15:46:21.801 4689 4689 E AndroidRuntime 在 java.lang.reflect.Method.invoke(Method.java:372) 01-13 15:46:21.801 4689 4689 E AndroidRuntime 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903) 01-13 15:46:21.801 4689 4689 E AndroidRuntime 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698) 01-13 15:46:21.796 4689 4689 D AndroidRuntime 关闭 VM 01-13 15:46:21.801 4689 4689 E AndroidRunti
【问题讨论】:
-
您在
tag中存储了什么?我的意思是您在使用setTag()时存储的值是多少? -
@RRR SetTag 滑动菜单项或 fvrtbtn?。没听懂你的问题
-
setTag 到 fvrtebutton
-
@RRR 如果它在收藏夹中,那么是的,如果不是的话
-
你从哪里得到喜欢与否?