看着网上的教程自己写了一个自定的Adapter,之后我的数据显示就一直有问题 本来是 一个名字 一个价格 一个介绍的  现在变成 三个名字 三个价格  三个介绍了,也不知道是哪里的问题 求解
代码
public class MyAdapter extends BaseAdapter{
private LayoutInflater layoutInflater;
private List<String> list;
public List<TextView> txtList = new ArrayList<TextView>(); public MyAdapter(Context context, List<String> list) {
this.layoutInflater = LayoutInflater.from(context);
this.list = list;
} @Override
public int getCount() {
if(list == null){
return 0;
}
return list.size();
} @Override
public Object getItem(int position) {
return this.list.get(position);
} @Override
public long getItemId(int position) {
return position;
} @Override
public View getView(int position, View convertView, ViewGroup parent) {
if(convertView == null){
convertView = layoutInflater.inflate(R.layout.listview, null);
} TextView ScenicSpots_name = (TextView) convertView.findViewById(R.id.ScenicSpots_name);
TextView S_price =(TextView) convertView.findViewById(R.id.S_price);
TextView S_introduction =(TextView) convertView.findViewById(R.id.S_introduction);
ScenicSpots_name.setText(list.get(position));
S_price.setText(list.get(position));
S_introduction.setText(list.get(position)); //Activity中要获取数量的list
txtList.add(ScenicSpots_name);
txtList.add(S_price);
txtList.add(S_introduction);
return convertView;
}}这个是MyAdapter类
下面这个是使用MyAdapter的
package mars.Travel;import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import mars.Travel.DataBaseService;
import android.app.Activity;
import android.database.Cursor;
import android.os.Bundle;
import android.widget.ListView;
public class Play extends Activity {
private MyAdapter adapter = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO 自动生成的方法存根
super.onCreate(savedInstanceState);
setContentView(R.layout.play);
  
        ListView mListView = (ListView) findViewById(R.id.Sport_listView);  
        adapter = setAdapterData();
        mListView.setAdapter(adapter);  
}
private MyAdapter setAdapterData() {
List<String> list = new ArrayList<String>();
 String sql;
        sql="select ScenicSpots_name,S_price,S_introduction from V_Spots";
        DataBaseService MyData = new DataBaseService(this);  
        Cursor cursor = MyData.getAllData(sql); 
       
        while(cursor.moveToNext()) {
           
         list.add( cursor.getString(0));
         list.add("门票:"+cursor.getString(1)+"元");
         list.add( cursor.getString(2));
        }
      
return new MyAdapter(this,list);
}
}不知道哪里出问题了,查出来的数据 显示很怪,我设置的布局都没了 直接变成一个LinearLayout

解决方案 »

  1.   

     //Activity中要获取数量的list
            txtList.add(ScenicSpots_name);
            txtList.add(S_price);
            txtList.add(S_introduction);
    这里添加之前,先txtList.clear()!
      

  2.   

    不是这里的问题,你这个txtList不知道有何用,完全可以去掉。
                while(cursor.moveToNext()) {
                   
                    list.add( cursor.getString(0));
                    list.add("门票:"+cursor.getString(1)+"元");
                    list.add( cursor.getString(2));
                }
    这里每次用一个map存值,然后放入list里,例如:
    Map<String,Object> map = new HashMap<String,Object>();
    map.putString(key,value);
    然后在  ScenicSpots_name.setText(list.get(position));
            S_price.setText(list.get(position));
            S_introduction.setText(list.get(position));
    setText(list.get(position).get(key));分析一下你的错误,因为你每次list存入一个值,然后在取值的时候,同一个值取了3次。
    不知道我上面的分析有没有错,欢迎拍砖!
      

  3.   

    这个我想是android的机制问题,因为getView是android系统调用的,但是他的调用你没法控制却不是按照你的期望去调用的,你打个日志就知道了,他position=0时你认为只要调用一次,其实你可以看到调用了多次。按照楼上说的用hashmap是可以解决问题的,因为hashmap的key是唯一的,而楼主用list,list里面是可以有重复的内容的,所以就会出现多次的重复了。
      

  4.   


     ScenicSpots_name.setText(list.get(position));
      S_price.setText(list.get(position));
      S_introduction.setText(list.get(position));
    这个地方不是很明显,三个控件设置了同一个值吗!!!
      

  5.   

    楼上正解,list的数组是3,楼主多输出一下信息就明白了,注意逻辑问题的