解决方案 »

  1.   

    哪个值发生变化,直接用handler去更新,像在activity中更新UI操作一样。
    你代码我没看,但这个方法以前我在项目中用过,绝对可以的。
      

  2.   

    谢谢你的回复,具体怎么做?能说得详细点吗?还有什么详细讲?handler更新UI,不会你可以去查相关资料。
    在adapter中创建一个handler,值发生改变时,handler 就send一个message,更新UI。
    其实用回调也可以,这个就不讲了。用上面这种就可以。
      

  3.   

    adapter不是有个getitem 的方法,getitem 然后跟新数据大概就行了吧
      

  4.   

    谢谢楼上的回复,我考虑过用handler的方式,但那样是在adapter里面更新UI。我是想在adapter外面更新,比如我代码中,在adapter外面其实已经改变了listview中某个item的控件值,但就是不知道怎么去刷新,让其显示出来。
      

  5.   

    getitem()方法根本没什么用的。
      

  6.   

    不好意思,由于用了2台电脑,2台电脑上的登陆的用户名不一样。
    mantt及lubirdge都是本人。继续求问!
      

  7.   

    如果在adapt而外面跟新的话,就在adapter中写个接口,外面来回调,然后通过runOnUi来跟新
      

  8.   


    谢谢,应该怎么写这个接口呢?runOnUi这个又该怎么来实现呢?
      

  9.   

    加载进把你item中的控件加上一个tag,如果需要修改,通过tag把这个控件改过来,然后直接操作就可以了。这样可以取代你的刷新效果,但要注意改完后把你加载的数据源也改了。要不然控件刷新时又变成原来的值了!
      

  10.   

    public View getView(int position, View convertView, ViewGroup parent) {holder.number.settag(//TODO 设置一个唯一的ID);
    }
    使用时,((TextView)findViewWithTag (设置一个唯一的ID)).settext();再改数据源的number
      

  11.   


    谢谢,应该怎么写这个接口呢?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()方法,子啊回调方法中跟新
      

  12.   

    给每个item加上tag   然后事件看是点击item 还是其他地方  然后判断这个tag  符合的就修改当前item  之前做过收藏item  点击的时候获取当前名称 然后根据下标修改显示图片
      

  13.   

    http://goobbe.com/questions/2788292/android-how-to-refresh-listview-contents
      

  14.   

    View view=listview.getChildAt(position);
    然后直接更新view
      

  15.   


    谢谢,应该怎么写这个接口呢?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>还有 ,你的布局文件有严重问题,你把宽高写死了,三位数根本不会出现,尽量减少这些小失误吧,浪费好多时间