解决方案 »

  1.   

    会不会因为我在子线程里实例化MyListAdapter的问题?
      

  2.   

    楼主看下是不是没有运行handleMessage()函数?Message msg = new Message();
    这句话改成:
    Message msg = Message.obtain();
      

  3.   

    我又作了个修改.是线程问题.现在getView()执行了.但是只被调用一次..但getCount是有多条记录的package com.naxieshu.activity;import java.util.List;
    import java.util.Map;import com.naxieshu.domain.Book;
    import com.naxieshu.service.NaxieshuService;
    import com.naxieshu.service.impl.NaxieshuServiceImpl;
    import com.naxieshu.util.ImageUtil;import android.app.Activity;
    import android.content.Context;
    import android.graphics.Bitmap;
    import android.os.Bundle;
    import android.os.Handler;
    import android.os.Message;
    import android.util.Log;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.ViewGroup;
    import android.view.View.OnClickListener;
    import android.widget.Button;
    import android.widget.ImageView;
    import android.widget.ListView;
    import android.widget.SimpleAdapter;
    import android.widget.TextView;public class FindActivity extends Activity implements OnClickListener{
    protected static final String TAG = "FindActivity";
    /**搜索按钮*/
    Button searchBtn;
    /**搜索输入框*/
    TextView searchText;
    /**搜索结果列表*/
    ListView listView;
    /**创建业务层实例*/
    NaxieshuService service = new NaxieshuServiceImpl(this);

    @Override
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_find);
    searchBtn = (Button)findViewById(R.id.search_btn);
    searchText = (TextView)findViewById(R.id.search_text);
    listView = (ListView)findViewById(R.id.search_books);

    /**绑定点击事件*/
    searchBtn.setOnClickListener(this);
    }

    Handler handler = new Handler() {
    public void handleMessage(Message msg) {
    if(msg.what == R.id.search_btn){
    List<Map<String,Book>> list = (List<Map<String, Book>>) msg.obj;
    /**实例自定义控件*/
    SimpleAdapter myListAdapter = new MyListAdapter(FindActivity.this,list);
    /**为listView绑定自定义控制*/
    listView.setAdapter(myListAdapter);
    }
    };
    };

    /**点击事件处理*/
    public void onClick(View v) {
    switch (v.getId()) {
    case R.id.search_btn:
    //因为数据源与MyListAdapter中涉及网络连接.所以开个子线程
    new Thread(){
    public void run() {
    String value = searchText.getText().toString();
    List<Map<String,Book>> list = service.findBookByNameOrWriter(value);
    Message msg = new Message();
    msg.what = R.id.search_btn;
    msg.obj = list;
    handler.sendMessage(msg);
    };
    }.start();
    break;
    }
    }

    /**自定义List内容控制*/
    class MyListAdapter extends SimpleAdapter{
    public Context context;
    public List<? extends Map<String, ?>> data;

    public MyListAdapter(Context context,
    List<? extends Map<String, ?>> data) {
    super(context, data, 0, null, null);
    this.context = context;
    this.data = data;
    }

    /**
     * 在创建View资源对象的时候提供效率的缓存策略
     */
    class ViewHold{
    //book.cover
    public ImageView image;
    //book.title book.shortIntro
    public TextView namtView,introView;
    }
    ViewHold hold =null;

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
    Log.i(TAG, "getView()---");
    //判断是否第一次执行convertView,如果是第一次就进行布局资源的创建操作
    if (convertView == null){
    hold = new ViewHold();
    //填充加载布局资源
    convertView = LayoutInflater.from(getApplicationContext()).inflate(R.layout.activity_find_listview, null);
    hold.image = (ImageView)convertView.findViewById(R.id.bookImage);
    hold.namtView = (TextView)convertView.findViewById(R.id.bookName);
    hold.introView = (TextView)convertView.findViewById(R.id.bookShortIntro);
    //保存标记
    Log.i(TAG, "getView()=====");
    convertView.setTag(hold);
    } else {
    Log.i(TAG, "getView()+++++");
    hold = (ViewHold) convertView.getTag();
    }
    //获取数据,进行数据填充
    Book book = (Book) data.get(position).get("book");
    Bitmap bitmap = ImageUtil.getImageBitmap(book.getCover());
    hold.image.setImageBitmap(bitmap);
    hold.namtView.setText(book.getTitle());
    Log.i(TAG, hold.namtView.getText().toString());
    hold.introView.setText(book.getShortIntro());
    return convertView;
    } @Override
    public int getCount() {
    Log.i(TAG,"getCount:"+this.data.size());
    return this.data.size();
    } @Override
    public Object getItem(int position) {
    Log.i(TAG, "getItem():"+getItem(position).toString());
    return super.getItem(position);
    } @Override
    public long getItemId(int position) {
    Log.i(TAG, "getIemId()"+getItemId(position));
    return super.getItemId(position);
    }
    }
    }
      

  4.   

    应是布局的问题了..
    handleMessage里打印listView的行数是有数据的..页面就不显示
      

  5.   

    可以看看这个
    http://bbs.csdn.net/topics/390849529?page=1#post-397901795
    http://www.apkbus.com/android-176569-1-1.html
      

  6.   

    可能是你把listview设置成gone了把。因为异步加载有几个状态:比如1.加载中》》》2.进度条》》》》2.notifyDataSetChanged然后显示成功