解决方案 »
- 推聊 - 3分钟可运行起来的开源 Android手机聊天系统
- android 4.0 下调用webview 出现的一个神奇错误
- android Listview 的问题
- 播放器滑动歌词快进
- 如何实现提示字符串渐渐消失效果
- android 启动虚拟机的时候报错.. 请大家帮忙看下啊
- android phonegap框架下 实现 websocket
- 在Java中设置Imageview的背景
- android listView item 布局
- andriod 开发
- 想要写个布局,底部是两个按钮,其余地方设置成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>还有 ,你的布局文件有严重问题,你把宽高写死了,三位数根本不会出现,尽量减少这些小失误吧,浪费好多时间