在 BaseAdapter 中动态增加单击时的文本计数
Dynamically Increase the text count on click in BaseAdapter
我在 Layout 中有 Like Button 并设置了文本 "like 0" ,我在 Base Adapter 中设置了,当我点击 Like Buttton 时,文本会增加而不刷新整个 Activity Like in facebook 应用程序,我卡住了三天,我已经阅读并实现了 Whosebug 的几乎所有答案,但没有得到解决方案。我希望我能得到答案。这是我的基本适配器 <-------->
public class FeedAdaptorView extends BaseAdapter{
ArrayList<HashMap<String, String>> data;
HashMap<String, String> resultp = new HashMap<String, String>();
String UserID;
public FeedAdaptorView(Context context,
ArrayList<HashMap<String, String>> arraylist, String uSERid2) {
this.context = context;
data = arraylist;
}
public class ViewHolder {
TextView name,time,status,likecount;
ImageView userimage,postimage;
Button like,comment,share;
}
@Override
public int getCount() {
return data.size();
}
@Override
public Object getItem(int position) {
return null;
}
@Override
public long getItemId(int position) {
return position;
}
public View getView(final int position, View convertView, final ViewGroup parent) {
if(convertView==null){
LayoutInflater inflater = ((Activity) context).getLayoutInflater();
convertView = inflater.inflate(R.layout.feed_item, null);
holder=new ViewHolder();
pos=getItemViewType(position);
holder.name = (TextView) convertView.findViewById(R.id.name);
holder.status=(TextView)convertView.findViewById(R.id.txtStatusMsg);
holder.userimage=(ImageView)convertView.findViewById(R.id.profilePic);
holder.postimage=(ImageView)convertView.findViewById(R.id.feedImage1);
holder.like=(Button)convertView.findViewById(R.id.like);
holder.comment=(Button)convertView.findViewById(R.id.comment);
holder.pos=position;
convertView.setTag(holder);
}
else {
holder = (ViewHolder) convertView.getTag();
}
holder.like.setTag(pos);
/* inflater = (LayoutInflater) context
holder.comment.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
((ListView) parent).performItemClick(v, position, 0);
}
}); .getSystemService(Context.LAYOUT_INFLATER_SERVICE);*/
holder.comment.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
((ListView) parent).performItemClick(v, position, 0);
}
});
holder.postimage.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
((ListView) parent).performItemClick(v, position, 0);
}
});
holder.like.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(context, "You Liked The Post", Toast.LENGTH_SHORT).show();
holder.like.setText("Like"+"4");
notifyDataSetChanged();
// here i am calling the web services for like button update
new likepost().execute();
}
});
<-------------------------------->
webservice callin method
class likepost extends AsyncTask<Void, Void, Void>
{
int flag=0;
@Override
protected void onPreExecute()
{
super.onPreExecute();
// Create a progressdialog
mProgressDialog = new ProgressDialog(context);
// Set progressdialog message
mProgressDialog.setMessage("Loading...");
mProgressDialog.setIndeterminate(false);
mProgressDialog.setCancelable(false);
// Show progressdialog
mProgressDialog.show();
}
@Override
protected Void doInBackground(Void... args0) {
List<NameValuePair> params = new ArrayList<NameValuePair>();
String Status="1";
String ID=feedid;
params.add(new BasicNameValuePair("UserID",UserID));
params.add(new BasicNameValuePair("FeedId",ID));
params.add(new BasicNameValuePair("like_status",Status));
JSONObject json = jsonParser.makeHttpRequest(AppControllerClass.FeedLike,"POST", params);
Log.d("Create Response", json.toString());
try{
if(json!=null)
{
String status=json.getString("status");
if(status.equals("Success"))
{
flag=1;
// Toast.makeText(context, "You Liked The Post", Toast.LENGTH_SHORT).show();
}
else
{
flag=2;
//Toast.makeText(context, "Check The Connection", Toast.LENGTH_SHORT).show();
}
}
else{
flag=2;
}
}
catch (JSONException e) {
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(Void args)
{
mProgressDialog.dismiss();
if(flag==1)
{
Toast.makeText(context, "You Liked The Post", Toast.LENGTH_SHORT).show();
}
else if (flag==2)
{
Toast.makeText(context, "Check The Connection", Toast.LENGTH_SHORT).show();
}
}
Dynamically Increase the text count on click in BaseAdapter
使用 getTag/setTag
:
@Override
public void onClick(View c) {
int count=0;
if(v.getTag()==null)
count=0;
else{
count=Integer.parseInt(v.getTag().toString());
}
count++;
((TextView)v).setText("Like"+count);
v.setTag(count);
}
试试这个..
@Override
public Object getItem(int position) {
return data.get(position);
}
而不是
@Override
public Object getItem(int position) {
return null;
}
第一次在Whosebug上回答问题,希望我的回答能够帮助到您解决问题。
问题:
holder.like.setText("Like"+"4");
notifyDataSetChanged();
问题就在这里。您已将其手动设置为 setText("Like"+"4")。在BaseAdapter的notifyDataSetChanged()函数中,引用了一个ADAPTER信息。
在您的情况下,它将是 resulttp 的引用。它引用您传入的数据 ArrayList。当您调用 notifyDataSetChanged() 时,它将返回 resulttp 并显示 ArrayList 中的内容。
解决方案:
1) 删除此行
holder.like.setText("Like"+"4");
2) 在您的 BaseAdapter 中添加一个名为 update() 的新函数 class
public void updateAdapter(ArrayList<HashMap<String, String>> newData)
{
this.data.clear();
this.data = data;
notifyDataSetChanged();
}
3) 在您的点赞按钮/图片 onClickListener 上,调用函数 updateAdapter() 并传入更新的 ArrayList。
应该已经好了。祝你好运!
我在 Layout 中有 Like Button 并设置了文本 "like 0" ,我在 Base Adapter 中设置了,当我点击 Like Buttton 时,文本会增加而不刷新整个 Activity Like in facebook 应用程序,我卡住了三天,我已经阅读并实现了 Whosebug 的几乎所有答案,但没有得到解决方案。我希望我能得到答案。这是我的基本适配器 <-------->
public class FeedAdaptorView extends BaseAdapter{
ArrayList<HashMap<String, String>> data;
HashMap<String, String> resultp = new HashMap<String, String>();
String UserID;
public FeedAdaptorView(Context context,
ArrayList<HashMap<String, String>> arraylist, String uSERid2) {
this.context = context;
data = arraylist;
}
public class ViewHolder {
TextView name,time,status,likecount;
ImageView userimage,postimage;
Button like,comment,share;
}
@Override
public int getCount() {
return data.size();
}
@Override
public Object getItem(int position) {
return null;
}
@Override
public long getItemId(int position) {
return position;
}
public View getView(final int position, View convertView, final ViewGroup parent) {
if(convertView==null){
LayoutInflater inflater = ((Activity) context).getLayoutInflater();
convertView = inflater.inflate(R.layout.feed_item, null);
holder=new ViewHolder();
pos=getItemViewType(position);
holder.name = (TextView) convertView.findViewById(R.id.name);
holder.status=(TextView)convertView.findViewById(R.id.txtStatusMsg);
holder.userimage=(ImageView)convertView.findViewById(R.id.profilePic);
holder.postimage=(ImageView)convertView.findViewById(R.id.feedImage1);
holder.like=(Button)convertView.findViewById(R.id.like);
holder.comment=(Button)convertView.findViewById(R.id.comment);
holder.pos=position;
convertView.setTag(holder);
}
else {
holder = (ViewHolder) convertView.getTag();
}
holder.like.setTag(pos);
/* inflater = (LayoutInflater) context
holder.comment.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
((ListView) parent).performItemClick(v, position, 0);
}
}); .getSystemService(Context.LAYOUT_INFLATER_SERVICE);*/
holder.comment.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
((ListView) parent).performItemClick(v, position, 0);
}
});
holder.postimage.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
((ListView) parent).performItemClick(v, position, 0);
}
});
holder.like.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(context, "You Liked The Post", Toast.LENGTH_SHORT).show();
holder.like.setText("Like"+"4");
notifyDataSetChanged();
// here i am calling the web services for like button update
new likepost().execute();
}
});
<-------------------------------->
webservice callin method
class likepost extends AsyncTask<Void, Void, Void>
{
int flag=0;
@Override
protected void onPreExecute()
{
super.onPreExecute();
// Create a progressdialog
mProgressDialog = new ProgressDialog(context);
// Set progressdialog message
mProgressDialog.setMessage("Loading...");
mProgressDialog.setIndeterminate(false);
mProgressDialog.setCancelable(false);
// Show progressdialog
mProgressDialog.show();
}
@Override
protected Void doInBackground(Void... args0) {
List<NameValuePair> params = new ArrayList<NameValuePair>();
String Status="1";
String ID=feedid;
params.add(new BasicNameValuePair("UserID",UserID));
params.add(new BasicNameValuePair("FeedId",ID));
params.add(new BasicNameValuePair("like_status",Status));
JSONObject json = jsonParser.makeHttpRequest(AppControllerClass.FeedLike,"POST", params);
Log.d("Create Response", json.toString());
try{
if(json!=null)
{
String status=json.getString("status");
if(status.equals("Success"))
{
flag=1;
// Toast.makeText(context, "You Liked The Post", Toast.LENGTH_SHORT).show();
}
else
{
flag=2;
//Toast.makeText(context, "Check The Connection", Toast.LENGTH_SHORT).show();
}
}
else{
flag=2;
}
}
catch (JSONException e) {
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(Void args)
{
mProgressDialog.dismiss();
if(flag==1)
{
Toast.makeText(context, "You Liked The Post", Toast.LENGTH_SHORT).show();
}
else if (flag==2)
{
Toast.makeText(context, "Check The Connection", Toast.LENGTH_SHORT).show();
}
}
Dynamically Increase the text count on click in BaseAdapter
使用 getTag/setTag
:
@Override
public void onClick(View c) {
int count=0;
if(v.getTag()==null)
count=0;
else{
count=Integer.parseInt(v.getTag().toString());
}
count++;
((TextView)v).setText("Like"+count);
v.setTag(count);
}
试试这个..
@Override
public Object getItem(int position) {
return data.get(position);
}
而不是
@Override
public Object getItem(int position) {
return null;
}
第一次在Whosebug上回答问题,希望我的回答能够帮助到您解决问题。
问题:
holder.like.setText("Like"+"4");
notifyDataSetChanged();
问题就在这里。您已将其手动设置为 setText("Like"+"4")。在BaseAdapter的notifyDataSetChanged()函数中,引用了一个ADAPTER信息。
在您的情况下,它将是 resulttp 的引用。它引用您传入的数据 ArrayList。当您调用 notifyDataSetChanged() 时,它将返回 resulttp 并显示 ArrayList 中的内容。
解决方案:
1) 删除此行
holder.like.setText("Like"+"4");
2) 在您的 BaseAdapter 中添加一个名为 update() 的新函数 class
public void updateAdapter(ArrayList<HashMap<String, String>> newData)
{
this.data.clear();
this.data = data;
notifyDataSetChanged();
}
3) 在您的点赞按钮/图片 onClickListener 上,调用函数 updateAdapter() 并传入更新的 ArrayList。
应该已经好了。祝你好运!