动态在listView的item显示数据,数据都是从后台获取的

Willem_wl 2016-06-18 12:07:21
我有一个ListView,数据都是从后台获取过来显示在item 上的。现在做一个弹窗的activity,是多选单选的这样的,选择完之后数据会显示在listview的item上。进行动态显示。用的BaseAdapter写的但是数据一直回调不过来。没办法更新一更新就报错。
我用的逻辑是这样的:首先ListView 需要进行网络请求显示数据,把数据放在dongtai里进行显示。然后点击单选或多选时候跳到窗口类的activity中。通过Intent回调数据,数据回调到原来的activity中显示数据。问题就出在这,回调回来的数据怎么弄都不显示在listview中,。求指教、
...全文
667 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
Willem_wl 2016-06-21
  • 打赏
  • 举报
回复
多选那个代码,回调回去的数据不显示在原来的item上,而是增加了一行,,,该怎么弄。。
Willem_wl 2016-06-21
  • 打赏
  • 举报
回复
看一下单选的代码,只贴了一部分。把数据回调回去,这部分成功了:

  li = (ListView) findViewById(R.id.popu_list);
		    adpter=new SimpleAdapter(SingleRadioPopup.this, data, R.layout.thirdlevelpopup_radio_list__item, key, v);
		    li.setAdapter(adpter);
		    
		    //item的点击事件
		    li.setOnItemClickListener(new OnItemClickListener(){	    	
				public void onItemClick(AdapterView<?> arg0, View pConvertView,int position, long arg3) {				
					//点击item后单选按钮改变图片
					 ChangeRadioImg(balanceIndex,false);  
		             ChangeRadioImg(position,true);  
		             balanceIndex=position;  	             
		             //点击item所对应的内容id
		             String check_id = (String) data.get(position).get("id"); 
		             String check_name = (String) data.get(position).get("name");                  
		             //判断是谁点击的
		   //          if(db.getText().equals("二级分类")){ 	            	
		            		 //----------------用intent返回数据-----	            		 
		            		 Bundle bundle = intent.getExtras();
		            		 bundle.putString("check_id", check_id);//添加要返回给页面的数据
		            		 bundle.putString("check_name", check_name);
		            		 bundle.putInt("position", position);
		            		 intent.putExtras(bundle);
		            		 SingleRadioPopup.this.setResult(Activity.RESULT_OK, intent);//返回页面
		            		 finish();	         
回调回到activity的代码。主要就是这部分的问题。不知道怎么搞!

	case 0:
				
				  check_id=data.getStringExtra("check_id");
	              check_name = data.getStringExtra("check_name");
	              String attributeid = data.getStringExtra("attribute_name_id");
	              System.out.println("--------回调成功----------"+check_id+check_name+attributeid);
	              DongTai dongtai=new DongTai();
	              dongtai.setFanhuiname(check_name);
	              dongtai.setFanhuiid(check_id);
	              dongtaiList.add(dongtai);
	              
	              adapter.notifyDataSetChanged();
	              DongtaiAdapter ad=new DongtaiAdapter(activity, dongtaiList);
	              
	              ad.add(dongtaiList);
	              mListView.setAdapter(ad);
	             // ad.getItem(Integer.valueOf(attributeid)).notify();
                  ad.notifyDataSetChanged();
	            
				break;
			case 2:
		            ArrayList<String> list_check_id = data.getStringArrayListExtra("check_id");
		            ArrayList<String> list_check_name = data.getStringArrayListExtra("check_name");
		            ArrayList<Integer> postposition =data.getIntegerArrayListExtra("position");
		            System.out.println("--------多选回调1----------"+list_check_name+list_check_id+postposition);
		            if(list_check_id.size()>0){//返回的值不为空
		            	
		          //  	 String id = service_region_id(list_check_id);
		          //  	 rd.setService_region(id);//在ReceiveData中赋值       
		            	 dt.setPosition(postposition);
//		            	 dt.setList_check_id(list_check_id);
//		            	 dt.setList_check_name(list_check_name);
		            	 DongtaiAdapter adap=new DongtaiAdapter(getActivity(), dongtaiList);
		   
		        
		           	  if(list_check_id.size()==1){//如果区域选择只选了一个
//		           		 choice_footview.setText(list_check_name.get(0));
		           		 dt.setFanhuiname(list_check_name.get(0));
		           		
		          // 	 Toast.makeText(PhotographyPopup.this,"选择:"+list_check_name.get(0),Toast.LENGTH_LONG).show();
		           	  }else if(list_check_id.size()==2){
//		           		choice_footview.setText(list_check_name.get(0)+","+list_check_name.get(1));
		           	 dt.setFanhuiname(list_check_name.get(0)+","+list_check_name.get(1));
		           		  
		           	  }else{//如果区域选择选了多个
//		           		choice_footview.setText(list_check_name.get(0)+","+list_check_name.get(1)+"...");
		           	 dt.setFanhuiname(list_check_name.get(0)+","+list_check_name.get(1)+"...");
		           	  }
		           	dongtaiList.add(dt);
		           	  System.out.println("--------多选回调2----------"+list_check_name.get(0));
		           	   adap.add(dongtaiList);
		            	mListView.setAdapter(adap);
		       //     	Untilty.setListViewHeightBasedOnChildren(mListView);
		           //	  dongtaia.setFanhuiname(dt.getFanhuiname().toString());
		           	  adap.notifyDataSetChanged();       
                      
		            } 
		            break;
请各位帮帮忙吧。困了好几天了。。。。
Willem_wl 2016-06-21
  • 打赏
  • 举报
回复
好的,我粘贴下代码哈,第一次发这个。
首先先从后台获取数据显示到listview中
		mListView.setVisibility(View.VISIBLE);


ArrayList<DongTai> list = new ArrayList<DongTai>();
list.clear();

if (dongtaiList != null && dongtaiList.size() > 0) {
list = dongtaiList;
}
adapter = new DongtaiAdapter(activity, list);

mListView.setAdapter(adapter);
Untilty.setListViewHeightBasedOnChildren(mListView);

是这样的
然后通过单选或者多选,进行选择listview里的数据数据。全部都是从后台获取的
@Override
public void onItemClick(AdapterView<?> arg0, View view, int p,long arg3) {
// TODO Auto-generated method stub
DongTai ent = (DongTai) adapter.getItem(p);
TextView tv_jibie =(TextView) view.findViewById(R.id.tv_jibie);
TextView tv_buxian =(TextView) view.findViewById(R.id.tv_buxian);
TextView name=(TextView) view.findViewById(R.id.tv_name_id);
TextView choice=(TextView) view.findViewById(R.id.tv_choice_id);

String text =tv_jibie.getText().toString();

//所点item的 属性id和选择id
name_id = name.getText().toString();
choice_id_checkbox = choice.getText().toString();
dt.setText(text);

int type=Integer.valueOf(ent.getProperty_input_type());
JSONArray aa = san.get(p);
ArrayList<Map<String, Object>> content = new ArrayList<Map<String,Object>>();
for(int a = 0; a < aa.size(); a++){
try {
String id_content = aa.getJSONObject(a).getString("value_id");
String name_content = aa.getJSONObject(a).getString("value_name");
Map<String,Object> map=new HashMap<String,Object>();
map.put("name", name_content);
map.put("id_region", id_content);
content.add(map);
} catch (Exception e) {
e.printStackTrace();
}
}
dt.setData(content);
if(ent.getProperty_name().equals("头车品牌")){
Intent in=new Intent();
in.setClass(getActivity(),ToucheActivity.class);
Bundle bun=new Bundle();
bun.putSerializable("db2",dt);
bun.putSerializable("rd", rd);
bun.putSerializable("name",ent.getProperty_name());
bun.putSerializable("attribute_name_id",name_id);
in.putExtras(bun);
startActivityForResult(in,10);
}
//多选
if(type==2){
Intent in = new Intent();
in.setClass(this.activity,SingleCheckBoxPopup.class);
Bundle bun = new Bundle();
bun.putSerializable("db2",dt);
bun.putSerializable("attribute_name_id_checkbox",name_id);
bun.putSerializable("rd", rd);
bun.putSerializable("name",ent.getProperty_name());
in.putExtras(bun);
startActivityForResult(in, 2);
}
//单选
if(type==1){

Intent in = new Intent();
in.setClass(this.activity,SingleRadioPopup.class);
Bundle bun = new Bundle();
bun.putSerializable("db2",dt);
bun.putSerializable("name",ent.getProperty_name());
bun.putSerializable("rd", rd);
in.putExtras(bun);
startActivityForResult(in, 0);
}
//手填
if(type==3){

}

}
蒲锦_up 2016-06-20
  • 打赏
  • 举报
回复
没代码和日志 说啥
会有那一天 2016-06-20
  • 打赏
  • 举报
回复
理论上只要更新一下数据 但是我们不知道你下载后的数据是放到那里所以不好回答
Gkery 2016-06-20
  • 打赏
  • 举报
回复
notify试一下
山鹰1985 2016-06-20
  • 打赏
  • 举报
回复
引用 楼主 qq_28745317 的回复:
我有一个ListView,数据都是从后台获取过来显示在item 上的。现在做一个弹窗的activity,是多选单选的这样的,选择完之后数据会显示在listview的item上。进行动态显示。用的BaseAdapter写的但是数据一直回调不过来。没办法更新一更新就报错。 我用的逻辑是这样的:首先ListView 需要进行网络请求显示数据,把数据放在dongtai里进行显示。然后点击单选或多选时候跳到窗口类的activity中。通过Intent回调数据,数据回调到原来的activity中显示数据。问题就出在这,回调回来的数据怎么弄都不显示在listview中,。求指教、
为什么要用弹窗Activity?来回传数据好玩吗? 直接用 Dialog办不到吗? 还有你是在哪个Activity中请求的数据? 解决思路: 在 ListView的Activity中 请求数据, 然后触发 Dialog 显示数据,然后点选 Dialog后,再刷新 ListView.很简单啊.一个自定义的Dialog 就可以搞定了.
IT行业学习者 2016-06-19
  • 打赏
  • 举报
回复
粘贴一下关键的代码
bdmh 2016-06-18
  • 打赏
  • 举报
回复
你先弄清楚错误信息是啥,对照着找问题,是空引用,还是越界,看清楚
有时候,使用ListView并不能满足应用程序所需要的功能。有些应用程序需要多组ListView,这时候我们就要使用一种新的控件ExpandableListView——可以扩展的ListView。它的作用就是将ListView进行分组。就好像我们使用QQ的时候,有“我的好友”,“陌生人”,“黑名单”一样,点击一下会扩展开,再点击一下又会收缩回去。 ExpandableListView是一个垂直滚动显示两级列表项的视图,与ListView不同的是,它可以有两层:每一层都能够被独立的展开并显示其子项。这些子项来自于与该视图关联的ExpandableListAdapter。 每一个可以扩展的列表项的旁边都有一个指示符(箭头)用来说明该列表项目前的状态(这些状态一般是已经扩展开的列表项,还没有扩展开的列表项,子列表项和最后一个子列表项)。可以使用方法:setChildIndicator(Drawable),setGroupIndicator(Drawable)(或者相应的XML文件的属性) 去设置这些指示符的样式。当然也可以使用默认的指示符。布android.R.layout.simple_expandable_list_item_1,android.R.layout.simple_expandable_list_item_2 和ListView一样,ExpandableListView也是一个需要Adapter作为桥梁来取得数据的控件。一般适用于ExpandableListView的Adapter都要继承BaseExpandableListAdapter这个类,并且必须重载getGroupView和getChildView这两个最为重要的方法。 BaseExpandableListAdapter的主要重载方法如下: public abstract ObjectgetChild (int groupPosition, int childPosition) 取得与指定分组、指定子项目关联的数据. 参数 groupPosition 包含子视图的分组的位置. childPosition 指定的分组中的子视图的位置. 返回 与子视图关联的数据. public abstract long getChildId (int groupPosition, intchildPosition) 取得给定分组中给定子视图的ID. 该组ID必须在组中是唯一的.必须不同于其他所有ID(分组及子项目的ID). 参数 groupPosition 包含子视图的分组的位置. childPosition 要取得ID的指定的分组中的子视图的位置. 返回 与子视图关联的ID. public abstract View getChildView (int groupPosition, intchildPosition, boolean isLastChild, View convertView, ViewGroup parent) 取得显示给定分组给定子位置的数据用的视图. 参数 groupPosition 包含要取得子视图的分组位置. childPosition 分组中子视图(要返回的视图)的位置. isLastChild 该视图是否为组中的最后一个视图. convertView 如果可能,重用旧的视图对象.使用前你应该保证视图对象为非空,并且是否是合适的类型.如果该对象不能转换为可以正确显示数据的视图,该方法就创建新视图.不保证使用先前由 getChildView(int, int,boolean, View, ViewGroup)创建的视图. parent 该视图最终从属的父视图. 返回 指定位置相应的子视图. public abstract int getChildrenCount (int groupPosition) 取得指定分组的子元素数. 参数 groupPosition 要取得子元素个数的分组位置. 返回 指定分组的子元素个数. public abstract long getCombinedChildId (long groupId, long childId) 取得一览中可以唯一识别子条目的 ID(包括分组ID和子条目ID).可扩展列表要求每个条目 (分组条目和子条目)具有一个可以唯一识别列表中子条目和分组条目的ID. 该方法根据给定子条目ID和分组条目ID返回唯一识别ID.另外,如果 hasStableIds() 为真,该函数返回的ID必须是固定不变的. 参数 groupId 包含子条目ID的分组条目ID. childId 子条目的ID. 返回 可以在所有分组条目和子条目中唯一识别该子条目的ID(可能是固定不变

80,349

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧