fragment里listview,map绑定数据后,前面的总被覆盖

Android 码拜 6年前 (2015-09-18) 612次浏览

 

有两个adapter,一个给listview,一个给spinner

可以确定的是,数据能绑到adapter上,并且adapter有几组数据就会加载几组,但最后所有item的内容都变成了绑定数据里的最后一组···fragment里listview,map绑定数据后,前面的总被覆盖

public class fagmentIndex extends Fragment{
	
    RefreshableView refreshableView;  
    ListView indexlistView;  
    private SimpleAdapter mAdapter;
    private SimpleAdapter carAdapter;
    private List<HashMap<String, Object>> carHashMaps;//这两行是给spinner的
    private HashMap<String, Object> carmap;
    private List<HashMap<String, Object>> mHashMaps;//这两行用给可刷新的那个listview
    private HashMap<String, Object> map;
    private int mCurrentSelectedPosition = 1;
    
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        //在这里定义Fragment的布局
    	View view=inflater.inflate(R.layout.fragment2, container,false);
    	Spinner sp1 =(Spinner) view.findViewById(R.id.spinnerAdapter);
    	
    	carAdapter = new SimpleAdapter(getActivity(), carData(), R.layout.list_item_car,
        		new String[]{"cartittle", "cartext1", "cartext2"}, new int[]{R.id.my_car_name, R.id.my_car_lis, R.id.my_car_condition});//对spinner进行配置
        
    	
    	sp1.setAdapter(carAdapter); 
    	
    	
    	//以下为刷新功能listview
        refreshableView = (RefreshableView) view.findViewById(R.id.refreshable_view);  
        indexlistView = (ListView) view.findViewById(R.id.list_view);  
        indexlistView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                
            }
        });
        mAdapter = new SimpleAdapter(getActivity(), getData(), R.layout.list_item_index,
        		new String[]{"tittle", "text1","text2"}, new int[]{R.id.my_item_name, R.id.my_list_text1,R.id.my_list_text2});
        
        
        indexlistView.setAdapter(mAdapter);
        indexlistView.setItemChecked(mCurrentSelectedPosition, true);
        refreshableView.setOnRefreshListener(new PullToRefreshListener() {  
        	 @Override 
            public void onRefresh() {  
                try {  
                    Thread.sleep(3000);  
                } catch (InterruptedException e) {  
                    e.printStackTrace();  
                }  
                refreshableView.finishRefreshing();  
            }  
        }, 0);  
        return view;  
    }  
	 private List<HashMap<String, Object>> getData() {
	    	//这是给listview用的
	    	mHashMaps = new ArrayList<HashMap<String,Object>>();
	    	
	    	map = new HashMap<String, Object>();
	        map.put("tittle", "昵称");
	        map.put("text1", "AAAAA");
	        map.put("text2", "VVVVV");
	        mHashMaps.add(map);
	        
	        map.put("tittle", "DDDDD");
	        map.put("text1", "CCCCC");
	        map.put("text2", "EEEEE");
	        mHashMaps.add(map);
	        
	        map.put("tittle", "昵称");
	        map.put("text1", "FFFFF");
	        map.put("text2", "VVVVV");
	        mHashMaps.add(map);
	    	
	        return mHashMaps;
	    }
	 private List<HashMap<String, Object>> carData() {
	    	/这是给spinner用的
	    	carHashMaps = new ArrayList<HashMap<String,Object>>();
	    	
	    	carmap = new HashMap<String, Object>();
	    	carmap.put("cartittle", "昵称");
	    	carmap.put("cartext2","AAA");
	    	carmap.put("cartext1", "CCCC");
	        carHashMaps.add(carmap);
	        
	        carmap.put("cartittle", "DDDDD");
	        carmap.put("cartext2","BBB");
	        carmap.put("cartext1", "CCCC");
	        carHashMaps.add(carmap);
	        
	       
	    	
	        return carHashMaps;
	    }
	   
}

然后附上相关的xml布局

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#ededed"
    android:orientation="vertical"
	>
    <LinearLayout
        android:id="@+id/linearLayout1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:layout_marginLeft="0dp"
        android:layout_marginTop="0dp"
        android:background="#fff"
        android:orientation="horizontal">
       
         <Spinner
              android:id="@+id/spinnerAdapter"
              android:layout_width="fill_parent"
   			  android:layout_height="wrap_content" 
   			  android:layout_marginTop="8dp"
              android:layout_marginBottom="8dp"
              android:layout_weight="1"
   			 />
        
    </LinearLayout>
        <!-- 查找相关属性 -->
        <com.yoco_tech.app.carpass.RefreshableView  
        android:id="@+id/refreshable_view"  
        android:layout_width="fill_parent"  
        android:layout_height="fill_parent" 
        android:layout_below="@+id/linearLayout1">  
  
        <ListView  
            android:layout_marginTop="10dp"
            android:id="@+id/list_view"  
            android:layout_width="fill_parent"  
            android:layout_height="fill_parent" >  
        </ListView>  
    </com.yoco_tech.app.carpass.RefreshableView>
    
</RelativeLayout>
#1
第一个问题已解决。

在以下内容中,每次绑定数据(put(“”,“”))之前,都要重新carmap = new HashMap<String, Object>();一下。

 private List<HashMap<String, Object>> carData() {
	    	
	    	carHashMaps = new ArrayList<HashMap<String,Object>>();
	    	
	    	carmap = new HashMap<String, Object>();
	    	carmap.put("cartittle", "昵称");
	    	carmap.put("cartext2","AAA");
	    	carmap.put("cartext1", "CCCC");
	        carHashMaps.add(carmap);
	        
	        carmap = new HashMap<String, Object>();
	        carmap.put("cartittle", "DDDDD");
	        carmap.put("cartext2","BBB");
	        carmap.put("cartext1", "CCCC");
	        carHashMaps.add(carmap);
	        
	       
	    	
	        return carHashMaps;
	    }

但还有个问题,就是这个代码里那个spinner感觉很不灵敏,然后点开以后没反应····是必须要重写一下onTouch啥的么

#2

30分

你都只创建了一个HashMap<String, Object>();对象

下面的数据都是更新的他,当然是相同数据了

#3

回复2楼:

嗯嗯谢谢,确实是这样,我自己对比了和之前正常显示的代码,加了这一句果然就好辣~

于是现在还有一个问题,就是那个spinner,之前没有加adapter用着好好的·····加了adapter以后感觉点开它比较费力,然后点开以后再点击列表项里的东西就没反应了,找了一些监听方法,还是解决不了·····

我希望实现的是点了它以后,它替换掉spinner那里默认的内容,然后我会调用下面的刷新函数···可以帮忙看看么?

#4
那个spinner绑定的adapter用的布局是这样一个简单的线性layout内嵌三个textview,设置了可点击,然而并没有什么用···

<?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="match_parent"
    android:orientation="horizontal" >
    <TextView
            android:id="@+id/my_car_name"
            android:textSize="16sp"
            android:layout_width="0dp"
            android:gravity="center"
            android:layout_gravity="center_vertical"
            android:layout_height="wrap_content"
            android:layout_marginTop="8dp"
            android:layout_marginBottom="8dp"
            android:layout_weight="1"
            android:clickable="true"
            android:focusable="true"
            android:labelFor="@+id/carInfo2"
            android:text="@string/carinfo2" >
         </TextView>
         
        <TextView
            android:id="@+id/my_car_lis"
            android:textSize="16sp"
            android:layout_width="0dp"
            android:gravity="center"
            android:layout_gravity="center_vertical"
            android:layout_height="wrap_content"
            android:layout_marginTop="8dp"
            android:layout_marginBottom="8dp"
            android:layout_weight="1"
            android:clickable="true"
            android:focusable="true"
            android:labelFor="@+id/carInfo3"
            android:text="@string/carinfo3" >
         </TextView>
         <TextView
            android:id="@+id/my_car_condition"
            android:textSize="16sp"
            android:layout_width="0dp"
            android:gravity="center"
            android:layout_gravity="center_vertical"
            android:layout_height="wrap_content"
            android:layout_marginTop="8dp"
            android:layout_marginBottom="8dp"
            android:layout_weight="1"
            android:clickable="true"
            android:focusable="true"
            android:labelFor="@+id/carInfo3"
            android:text="@string/carinfo3" >
         </TextView>
</LinearLayout>
#6

10分

原始的SimpleAdapter使用list提供数据好像是有问题的,用String[]提供数据是正常的
#7

回复6楼:

唔昨天搜其他关键字的时候意外搜索到Listview内部组件与listview抢焦点这么一个概念,我的listview里面嵌套了三个textview,listview的焦点会被它们抢走,而textview我并没有监听点击事件,于是模拟起来就显得spiner很不灵敏

这种情况,如果内部组件不需要设监听的话,可以直接focusable和clickable(是这样拼的吧)直接改成false,然后listview就好啦~


CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明fragment里listview,map绑定数据后,前面的总被覆盖
喜欢 (0)
[1034331897@qq.com]
分享 (0)