Android 在listview中上下滚动后,Like按钮和Like计数器重置为旧值
喜欢某个新闻项目后,心脏按钮显示红色,计数器设置为1,但在上下滚动后,计数器返回到零,心脏按钮从服务器加载时从红色变为灰色。我尝试使用notifyDataSetChanged(),但在适配器中不起作用……下面是我实现的代码Android 在listview中上下滚动后,Like按钮和Like计数器重置为旧值,android,baseadapter,notifydatasetchanged,Android,Baseadapter,Notifydatasetchanged,喜欢某个新闻项目后,心脏按钮显示红色,计数器设置为1,但在上下滚动后,计数器返回到零,心脏按钮从服务器加载时从红色变为灰色。我尝试使用notifyDataSetChanged(),但在适配器中不起作用……下面是我实现的代码 public class ListViewAdapterSup extends BaseAdapter { // Declare Variables Context context; LayoutInflater inflater; ArrayList<HashMap
public class ListViewAdapterSup extends BaseAdapter {
// Declare Variables
Context context;
LayoutInflater inflater;
ArrayList<HashMap<String, String>> data;
ImageLoader imageLoader;
HashMap<String, String> resultp = new HashMap<String, String>();
public ListViewAdapterSup(Context context,
ArrayList<HashMap<String, String>> arraylist) {
this.context = context;
data = arraylist;
imageLoader = new ImageLoader(context);
}
@Override
public int getCount() {
return data.size();
}
@Override
public Object getItem(int position) {
return null;
}
@Override
public long getItemId(int position) {
return 0;
}
static class ViewHolder {
// Declare Variables
TextView supmessageTV;
ImageView ImageLike;
ImageView ImageComment;
}
ViewHolder holder;
public View getView(final int position, View itemView, ViewGroup parent) {
itemView = null;
if (itemView == null) {
//itemView.setTag();
inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
itemView = inflater.inflate(R.layout.sups_list_item, parent, false);
// Get the position
resultp = data.get(position);
holder = new ViewHolder();
// Locate the TextViews in listview_item.xml
holder.messageTV = (TextView) itemView.findViewById(R.id.status);
// Locate the ImageView in listview_item.xml
holder.ImageLike = (ImageView) itemView.findViewById(R.id.likeImage);
holder.ImageComment = (ImageView) itemView.findViewById(R.id.ImageComment);
holder.viewLikesImageClick = (ImageView) itemView.findViewById(R.id.imageVieew);
}
else{
holder = (ViewHolder) itemView.getTag();
}
// Capture position and set results to the TextViews
holder.messageTV.setText(resultp.get(News.MESSAGE));
holder.likesCountTV.setText(resultp.get(News.LIKES_COUNT));
holder.commentsCountTV.setText(resultp.get(News.COMMENTS_COUNT));
holder.ImageLike.setTag(holder);
holder.ImageLike.setOnClickListener(new View.OnClickListener() {
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
@Override
public void onClick(View view) {
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) {
holder = (ViewHolder)view.getTag();
resultp = data.get(position);
if(holder.ImageLike.getDrawable().getConstantState().equals(context.getResources().getDrawable(R.drawable.ic_favorite_white_24dp).getConstantState())){
resultp = data.get(position);
ConnectionDetector cd = new ConnectionDetector(context);
if (!cd.isConnectingToInternet()) {
Toast.makeText(context,"No internet connection",Toast.LENGTH_SHORT).show();
}
else
{
new LikeNews().execute();
String number = holder.likesCountTV.getText().toString();
int num = Integer.parseInt(number);
int nene = num + 1;
String str = String.valueOf(nene);
holder.likesCountTV.setText(str);
//holder.likeBTN.setText("LIKED");
holder.ImageLike.setImageResource(R.drawable.ic_favorite_red_24dp);
}
}
else if(holder.ImageLike.getDrawable().getConstantState().equals(context.getResources().getDrawable(R.drawable.ic_favorite_red_24dp).getConstantState())){
resultp = data.get(position);
ConnectionDetector cd = new ConnectionDetector(context);
if (!cd.isConnectingToInternet()) {
Toast.makeText(context,"No internet connection",Toast.LENGTH_SHORT).show();
}
else
{
new UnLikeNews().execute();
String number = holder.likesCountTV.getText().toString();
int num = Integer.parseInt(number);
int nene = num - 1;
String str = String.valueOf(nene);
holder.likesCountTV.setText(str);
// holder.likeBTN.setText("Like");
holder.ImageLike.setImageResource(R.drawable.ic_favorite_white_24dp);
}
}
}
else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
holder = (ViewHolder)view.getTag();
resultp = data.get(position);
if(holder.ImageLike.getDrawable().getConstantState().equals(holder.ImageLike.getContext().getDrawable(R.drawable.ic_favorite_white_24dp).getConstantState())){
resultp = data.get(position);
ConnectionDetector cd = new ConnectionDetector(context);
if (!cd.isConnectingToInternet()) {
Toast.makeText(context,"No internet connection",Toast.LENGTH_SHORT).show();
}
else
{
new LikeNews().execute();
String number = holder.likesCountTV.getText().toString();
int num = Integer.parseInt(number);
int nene = num + 1;
String str = String.valueOf(nene);
holder.likesCountTV.setText(str);
holder.ImageLike.setImageResource(R.drawable.ic_favorite_red_24dp);
}
}
else if(holder.ImageLike.getDrawable().getConstantState().equals(holder.ImageLike.getContext().getDrawable(R.drawable.ic_favorite_red_24dp).getConstantState())){
resultp = data.get(position);
ConnectionDetector cd = new ConnectionDetector(context);
if (!cd.isConnectingToInternet()) {
Toast.makeText(context,"No internet connection",Toast.LENGTH_SHORT).show();
}
else
{
new UnLikeNews().execute();
String number = holder.likesCountTV.getText().toString();
int num = Integer.parseInt(number);
int nene = num - 1;
String str = String.valueOf(nene);
holder.likesCountTV.setText(str);
holder.ImageLike.setImageResource(R.drawable.ic_favorite_white_24dp);
}
}
}
}
});
return itemView;
}
public class LikeNews extends AsyncTask<String, String, String> {
boolean hasUserLiked = false;
protected void onPreExecute() {
super.onPreExecute();
}
@Override
protected String doInBackground(String... strings) {
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost("www.example.com");
try {
List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2);
nameValuePairs.add(new BasicNameValuePair("id", "01"));
nameValuePairs.add(new BasicNameValuePair("username", user));
nameValuePairs.add(new BasicNameValuePair("user_involved", "mark");
httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
httpclient.execute(httppost);
hasUserLiked = true;
} catch (NullPointerException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(String lenghtOfFile) {
}
}
public class UnLikeNews extends AsyncTask<String, String, String> {
protected void onPreExecute() {
super.onPreExecute();
}
@Override
protected String doInBackground(String... strings) {
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost("www.example.com");
try {
List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2);
nameValuePairs.add(new BasicNameValuePair("id", "01"));
nameValuePairs.add(new BasicNameValuePair("username", user));
httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
httpclient.execute(httppost);
} catch (NullPointerException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(String lenghtOfFile) {
//
}
}
}
公共类ListViewAdapterUp扩展了BaseAdapter{
//声明变量
语境;
充气机;
阵列列表数据;
图像加载器;
HashMap resultp=新的HashMap();
公共ListViewAdapterUp(上下文,
ArrayList(ArrayList){
this.context=上下文;
数据=数组列表;
imageLoader=新的imageLoader(上下文);
}
@凌驾
public int getCount(){
返回data.size();
}
@凌驾
公共对象getItem(int位置){
返回null;
}
@凌驾
公共长getItemId(int位置){
返回0;
}
静态类视窗夹{
//声明变量
短信电视;
图像视图图像化;
ImageView ImageComment;
}
视窗座;
公共视图getView(最终整数位置、视图项视图、视图组父级){
itemView=null;
如果(itemView==null){
//setTag();
充气器=(LayoutFlater)context.getSystemService(context.LAYOUT\u充气器\u服务);
itemView=充气机。充气(R.layout.sups\u list\u项目,父项,false);
//获得职位
resultp=data.get(位置);
holder=新的ViewHolder();
//在listview_item.xml中找到文本视图
holder.messageTV=(TextView)itemView.findViewById(R.id.status);
//在listview_item.xml中找到ImageView
holder.ImageLike=(ImageView)itemView.findViewById(R.id.likeImage);
holder.ImageComment=(ImageView)itemView.findViewById(R.id.ImageComment);
holder.viewLikesImageClick=(ImageView)itemView.findViewById(R.id.ImageView);
}
否则{
holder=(ViewHolder)itemView.getTag();
}
//捕获位置并将结果设置为文本视图
holder.messageTV.setText(resultp.get(News.MESSAGE));
holder.likescontv.setText(resultp.get(News.LIKES_COUNT));
holder.commentsconttv.setText(resultp.get(News.COMMENTS_COUNT));
holder.ImageLike.setTag(holder);
holder.ImageLike.setOnClickListener(新视图.OnClickListener(){
@TargetApi(Build.VERSION\u code.LOLLIPOP)
@凌驾
公共void onClick(视图){
if(Build.VERSION.SDK\u INT=Build.VERSION\u code.LOLLIPOP){
holder=(ViewHolder)view.getTag();
resultp=data.get(位置);
if(holder.ImageLike.getDrawable().getConstantState().equals(holder.ImageLike.getContext().getDrawable(R.drawable.ic\u favorite\u white\u 24dp).getConstantState()){
resultp=data.get(位置);
ConnectionDetector cd=新的ConnectionDetector(上下文);
如果(!cd.isConnectingToInternet()){
烤面包
if (itemView == null) {
//itemView.setTag();
inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
itemView = inflater.inflate(R.layout.sups_list_item, parent, false);
// Get the position
resultp = data.get(position);
holder = new ViewHolder();
// Locate the TextViews in listview_item.xml
holder.messageTV = (TextView) itemView.findViewById(R.id.status);
// Locate the ImageView in listview_item.xml
holder.ImageLike = (ImageView) itemView.findViewById(R.id.likeImage);
holder.ImageComment = (ImageView) itemView.findViewById(R.id.ImageComment);
holder.viewLikesImageClick = (ImageView) itemView.findViewById(R.id.imageVieew);
itemView.setTag(holder);
}
holder = (ViewHolder) itemView.getTag();
@Override
public Object getItem(int position) {
return data.get(position);
}