改变listview中某一个item的控件值,怎么对其单独刷新? listview单独刷新item刷新 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 哪个值发生变化,直接用handler去更新,像在activity中更新UI操作一样。你代码我没看,但这个方法以前我在项目中用过,绝对可以的。 谢谢你的回复,具体怎么做?能说得详细点吗?还有什么详细讲?handler更新UI,不会你可以去查相关资料。在adapter中创建一个handler,值发生改变时,handler 就send一个message,更新UI。其实用回调也可以,这个就不讲了。用上面这种就可以。 adapter不是有个getitem 的方法,getitem 然后跟新数据大概就行了吧 谢谢楼上的回复,我考虑过用handler的方式,但那样是在adapter里面更新UI。我是想在adapter外面更新,比如我代码中,在adapter外面其实已经改变了listview中某个item的控件值,但就是不知道怎么去刷新,让其显示出来。 getitem()方法根本没什么用的。 不好意思,由于用了2台电脑,2台电脑上的登陆的用户名不一样。mantt及lubirdge都是本人。继续求问! 如果在adapt而外面跟新的话,就在adapter中写个接口,外面来回调,然后通过runOnUi来跟新 谢谢,应该怎么写这个接口呢?runOnUi这个又该怎么来实现呢? 加载进把你item中的控件加上一个tag,如果需要修改,通过tag把这个控件改过来,然后直接操作就可以了。这样可以取代你的刷新效果,但要注意改完后把你加载的数据源也改了。要不然控件刷新时又变成原来的值了! public View getView(int position, View convertView, ViewGroup parent) {holder.number.settag(//TODO 设置一个唯一的ID);}使用时,((TextView)findViewWithTag (设置一个唯一的ID)).settext();再改数据源的number 谢谢,应该怎么写这个接口呢?runOnUi这个又该怎么来实现呢?比如在adapter中写一个接口public interface RefreshItemListener{ void callback(TextView tv);}private RefreshItemListener mRefreshItemListener;public void setRefreshItemListener(RefreshItemListener l){ mRefreshItemListener = l;}在adapter需要更新的地方,调用 mRefreshItemListener.callback();callback()中传入需要更新的控件和参数。在activity中,调用setRefreshItemListener()方法,子啊回调方法中跟新 给每个item加上tag 然后事件看是点击item 还是其他地方 然后判断这个tag 符合的就修改当前item 之前做过收藏item 点击的时候获取当前名称 然后根据下标修改显示图片 http://goobbe.com/questions/2788292/android-how-to-refresh-listview-contents View view=listview.getChildAt(position);然后直接更新view 谢谢,应该怎么写这个接口呢?runOnUi这个又该怎么来实现呢?今天上班没有时间,晚上回来抽空帮你解决了。直接给你看代码吧,用的是回调接口。package com.nsz.test;import java.util.ArrayList;import java.util.HashMap;import android.app.Activity;import android.os.Bundle;import android.util.Log;import android.view.View;import android.widget.AbsListView;import android.widget.AbsListView.OnScrollListener;import android.widget.ListView;import android.widget.TextView;import com.example.test.R;import com.nsz.test.MyAdapter.CallBackItemListener;public class ListViewTest extends Activity { ListView listview; ArrayList<HashMap<String, Object>> listItem = new ArrayList<HashMap<String, Object>>(); private MyAdapter myadapter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_record); listview = (ListView) findViewById(R.id.split_listview); for (int i = 1; i <= 100; i++) { HashMap<String, Object> map = new HashMap<String, Object>(); map.put("number", i + ""); listItem.add(map); } myadapter = new MyAdapter(this, listItem); listview.setAdapter(myadapter); myadapter.setmListener(new CallBackItemListener() { @Override public void callBackItem(int position, HashMap<String, Object> map) { listItem.remove(position); map.put("number", "测试下哦"); listItem.add(position, map); myadapter.notifyDataSetChanged(); } }); listview.setOnScrollListener(new OnScrollListener() { @Override public void onScrollStateChanged(AbsListView view, int scrollState) { } @Override public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) { } }); // /////////////////////////下面是我认为可以对listview中的第50item进行改变的代码:// View localView = getViewByPosition(50, listview);// TextView localtextviewNumber = (TextView) localView .findViewById(R.id.tv_split_number);// Log.i("hahalog", "number_before=" + localtextviewNumber.getText());// localtextviewNumber.setText("500");// Log.i("hahalog", "number2_after=" + localtextviewNumber.getText());// myadapter.notifyDataSetChanged(); // ////////////////////////////通过log信息看出,以上代码改变了其值,但没有更新在界面上,界面上的值还是50,而不是500!!! } public View getViewByPosition(int pos, ListView listView) { int firstListItemPosition = listView.getFirstVisiblePosition(); int lastListItemPosition = firstListItemPosition + listView.getChildCount() - 1; if (pos < firstListItemPosition || pos > lastListItemPosition) { return listView.getAdapter().getView(pos, null, listView); } else { final int childIndex = pos - firstListItemPosition; return listView.getChildAt(childIndex); } }}package com.nsz.test;import java.util.ArrayList;import java.util.HashMap;import android.content.Context;import android.util.Log;import android.view.View;import android.view.ViewGroup;import android.widget.BaseAdapter;import android.widget.TextView;import com.example.test.R;public class MyAdapter extends BaseAdapter { private Context context; private ArrayList<HashMap<String, Object>> listItem; private CallBackItemListener mListener; /* * public MyAdapter(Context context, List<String> dataList, ListView * listView) { super(context, 0); this.listView = listView; this.context = * context; this.dataList = dataList; } */ public MyAdapter(Context context, ArrayList<HashMap<String, Object>> listItem) { super(); this.context = context; this.listItem = listItem; } public CallBackItemListener getmListener() { return mListener; } public void setmListener(CallBackItemListener mListener) { this.mListener = mListener; } public int getCount() { if (listItem != null) { return listItem.size(); } else { return 0; } } public int getItemViewType(int position) { return position; } public int getViewTypeCount() { return 1; } public Object getItem(int arg0) { return listItem.get(arg0); } public long getItemId(int position) { return position; } public boolean isEnabled(int position) { return false; } public View getView(int position, View convertView, ViewGroup parent) { ViewHolder holder = null; if ( convertView == null ) { Log.i("lzqlog", "context 1=" + context); convertView = View.inflate(context, R.layout.practise_split_vlist, null); holder = new ViewHolder(); holder.number = (TextView) convertView.findViewById(R.id.tv_split_number); convertView.setTag(holder); } else { holder = (ViewHolder) convertView.getTag(); } Log.i("lzqlog", "context 2=" + context); holder.number.setText( (String) listItem.get(position).get("number") ); if( position == 49 ) { HashMap<String, Object> map = listItem.get(position); mListener.callBackItem(position, map); } return convertView; } static class ViewHolder { public TextView number; } public interface CallBackItemListener{ void callBackItem(int position, HashMap<String, Object> map); }}<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" android:background="#ff0000" > <TextView android:id="@+id/tv_split_number" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="10dp" android:text="ssssssssssssssssssssssssssss" android:textSize="20px" /></LinearLayout>还有 ,你的布局文件有严重问题,你把宽高写死了,三位数根本不会出现,尽量减少这些小失误吧,浪费好多时间 给企业开发一个安卓软件和苹果软件,一般是什么价格? android bks证书读取出错 请大虾们推荐Android视频谢谢 *.c或*.cpp编译成*.so文件 如何杀死占用端口的进程 在程序里怎么能跳到无线控件呢? 如何将YUV420格式的图表转成黑白图 求大家帮帮忙:viewpager 页卡内部内容变化 android NDK 新手的问题 切换fragment时,activity里的ToolBar产生分层现象 想要写个布局,底部是两个按钮,其余地方设置成imageview 求linux下android/platform-tools/hprof-conv文件的资源
你代码我没看,但这个方法以前我在项目中用过,绝对可以的。
在adapter中创建一个handler,值发生改变时,handler 就send一个message,更新UI。
其实用回调也可以,这个就不讲了。用上面这种就可以。
mantt及lubirdge都是本人。继续求问!
谢谢,应该怎么写这个接口呢?runOnUi这个又该怎么来实现呢?
}
使用时,((TextView)findViewWithTag (设置一个唯一的ID)).settext();再改数据源的number
谢谢,应该怎么写这个接口呢?runOnUi这个又该怎么来实现呢?
比如在adapter中写一个接口
public interface RefreshItemListener{
void callback(TextView tv);
}private RefreshItemListener mRefreshItemListener;
public void setRefreshItemListener(RefreshItemListener l){
mRefreshItemListener = l;
}在adapter需要更新的地方,调用 mRefreshItemListener.callback();
callback()中传入需要更新的控件和参数。在activity中,调用setRefreshItemListener()方法,子啊回调方法中跟新
然后直接更新view
谢谢,应该怎么写这个接口呢?runOnUi这个又该怎么来实现呢?今天上班没有时间,晚上回来抽空帮你解决了。直接给你看代码吧,用的是回调接口。
package com.nsz.test;import java.util.ArrayList;
import java.util.HashMap;import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.AbsListView;
import android.widget.AbsListView.OnScrollListener;
import android.widget.ListView;
import android.widget.TextView;import com.example.test.R;
import com.nsz.test.MyAdapter.CallBackItemListener;public class ListViewTest extends Activity {
ListView listview;
ArrayList<HashMap<String, Object>> listItem = new ArrayList<HashMap<String, Object>>();
private MyAdapter myadapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_record); listview = (ListView) findViewById(R.id.split_listview);
for (int i = 1; i <= 100; i++) {
HashMap<String, Object> map = new HashMap<String, Object>();
map.put("number", i + "");
listItem.add(map);
}
myadapter = new MyAdapter(this, listItem);
listview.setAdapter(myadapter);
myadapter.setmListener(new CallBackItemListener() {
@Override
public void callBackItem(int position, HashMap<String, Object> map) {
listItem.remove(position);
map.put("number", "测试下哦");
listItem.add(position, map);
myadapter.notifyDataSetChanged();
}
});
listview.setOnScrollListener(new OnScrollListener() {
@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
}
@Override
public void onScroll(AbsListView view, int firstVisibleItem,
int visibleItemCount, int totalItemCount) {
}
}); // /////////////////////////下面是我认为可以对listview中的第50item进行改变的代码:
// View localView = getViewByPosition(50, listview);
// TextView localtextviewNumber = (TextView) localView .findViewById(R.id.tv_split_number);
// Log.i("hahalog", "number_before=" + localtextviewNumber.getText());
// localtextviewNumber.setText("500");
// Log.i("hahalog", "number2_after=" + localtextviewNumber.getText());
// myadapter.notifyDataSetChanged();
// ////////////////////////////通过log信息看出,以上代码改变了其值,但没有更新在界面上,界面上的值还是50,而不是500!!!
} public View getViewByPosition(int pos, ListView listView) {
int firstListItemPosition = listView.getFirstVisiblePosition();
int lastListItemPosition = firstListItemPosition + listView.getChildCount() - 1;
if (pos < firstListItemPosition || pos > lastListItemPosition) {
return listView.getAdapter().getView(pos, null, listView);
} else {
final int childIndex = pos - firstListItemPosition;
return listView.getChildAt(childIndex);
}
}
}package com.nsz.test;import java.util.ArrayList;
import java.util.HashMap;import android.content.Context;
import android.util.Log;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;import com.example.test.R;public class MyAdapter extends BaseAdapter { private Context context;
private ArrayList<HashMap<String, Object>> listItem;
private CallBackItemListener mListener; /*
* public MyAdapter(Context context, List<String> dataList, ListView
* listView) { super(context, 0); this.listView = listView; this.context =
* context; this.dataList = dataList; }
*/
public MyAdapter(Context context, ArrayList<HashMap<String, Object>> listItem) {
super();
this.context = context;
this.listItem = listItem;
} public CallBackItemListener getmListener() {
return mListener;
} public void setmListener(CallBackItemListener mListener) {
this.mListener = mListener;
} public int getCount() {
if (listItem != null) {
return listItem.size();
} else {
return 0;
}
} public int getItemViewType(int position) {
return position;
} public int getViewTypeCount() {
return 1;
} public Object getItem(int arg0) {
return listItem.get(arg0);
} public long getItemId(int position) {
return position;
} public boolean isEnabled(int position) {
return false;
} public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder = null;
if ( convertView == null ) {
Log.i("lzqlog", "context 1=" + context);
convertView = View.inflate(context, R.layout.practise_split_vlist, null);
holder = new ViewHolder();
holder.number = (TextView) convertView.findViewById(R.id.tv_split_number);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
Log.i("lzqlog", "context 2=" + context);
holder.number.setText( (String) listItem.get(position).get("number") );
if( position == 49 ) {
HashMap<String, Object> map = listItem.get(position);
mListener.callBackItem(position, map);
}
return convertView;
} static class ViewHolder {
public TextView number; }
public interface CallBackItemListener{
void callBackItem(int position, HashMap<String, Object> map);
}}<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:background="#ff0000" > <TextView
android:id="@+id/tv_split_number"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="10dp"
android:text="ssssssssssssssssssssssssssss"
android:textSize="20px" /></LinearLayout>还有 ,你的布局文件有严重问题,你把宽高写死了,三位数根本不会出现,尽量减少这些小失误吧,浪费好多时间