ScrollView+Fragment+ListView嵌套ListView,麻麻再也不用担心我

前言

之前写了一篇文章 android ListView/GridView与ScrollView嵌套的滑动冲突解决 介绍了如何解决ScrollView与AdapterView的嵌套,但是没有给出demo,那是因为那些代码比较多,而且是在手头的项目里,业务逻辑代码比较多,所以第一时间没有分享给大家。 今天终于有空把这些代码全部抽离了出来,并且去掉了业务代码和不必要的内容,以便大家能够更好的学习这个知识。 先贴一个效果图吧:

之前项目里我是使用复写ScrollView的onInterceptTouchEvent方法来接管滑动事件的,而有小伙伴@liu告诉我可以使用

android:focusable=”true”android:focusableInTouchMode=”true”

来设置ScrollView接管事件。于是本Demo就使用了这个方法,结果与前一种方法效果上没有发现区别。

ListView嵌套

前一篇文章只写了滑动冲突解决的问题,本文也不再多赘述了,而ListView与ListView的嵌套里面还有其他的一些极易出错之处。 其中ListView中数据混乱(不是指图片)的问题应该来说是最重要也是比较烦人的bug

我的第一层ListView 的Adapter:

public class QuestionCLAdapter extends MyBaseAdapter<QuestionCL> {//将下级Adapter放到上级Adapter中维护起来,防止new多个Adapter导致数据错乱private HashMap<Integer,QuestionCLOptionAdapter> ads = new HashMap<Integer, QuestionCLOptionAdapter>();public QuestionCLAdapter(Context context) {super(context);// TODO Auto-generated constructor stub}@Overridepublic void setItems(List<QuestionCL> itemList) {// TODO Auto-generated method stubsuper.setItems(itemList);for (int i = 0; i < itemList.size(); i++) {ads.put(i,new QuestionCLOptionAdapter(context,itemList.get(i)));}}@Overridepublic View getView(int position, View convertView, ViewGroup parent) {// TODO Auto-generated method stubViewHolder holder = null;if(convertView == null){convertView = inflater.inflate(R.layout.item_error_question_detail_c, null);holder = new ViewHolder();holder.ansysLayout = (LinearLayout) convertView.findViewById(R.id.layout_question_ansys);holder.questionTitleNum = (TextView) convertView.findViewById(R.id.tv_error_questioncl_titlenum);holder.questionclTxt = (TextView) convertView.findViewById(R.id.tv_error_questioncl_text);holder.questionRightTxt = (TextView) convertView.findViewById(R.id.tv_question_rightTxt);holder.questionansysTxt = (TextView) convertView.findViewById(R.id.txt_question_ansys);holder.questionclOptionsLv = (ListView) convertView.findViewById(R.id.lv_error_detail_c_option);convertView.setTag(holder);}else{holder = (ViewHolder)convertView.getTag();}final QuestionCL item = itemList.get(position);//初始化界面与监听器……if (item.isSubmit()) {holder.ansysLayout.setVisibility(View.VISIBLE);int temp = 65;for (int i = 0; i < item.getItems().size(); i++) {if (item.getItems().get(i).getIsTrue() == 1) {temp += i;}}holder.questionRightTxt.setText((char)temp +””);Log.i(TAG, (char)temp +””);if (null != item.getAnalysis()) {holder.questionansysTxt.setText(Html.fromHtml(item.getAnalysis()));}}else {holder.ansysLayout.setVisibility(View.GONE);}holder.questionTitleNum.setText(item.getQustionid());holder.questionclTxt.setText(Html.fromHtml(item.getQustiontext()));if (null != ads.get(position)) {holder.questionclOptionsLv.setAdapter(ads.get(position));}return convertView;}public class ViewHolder{LinearLayout ansysLayout;TextView questionTitleNum;TextView questionRightTxt;TextView questionansysTxt;TextView questionclTxt;ListView questionclOptionsLv;}}

应该来说是一个很经典很常规的自定义Adapter实现吧,,继承的是自定义的虚基类。 可以看到我用一个容器作为类变量去管理其下级Adapter,在每次getView的时候都确保用的是它自己的数据而不是 重新new一个Adapter出来。

在人生的道路上,谁都会遇到困难和挫折,

ScrollView+Fragment+ListView嵌套ListView,麻麻再也不用担心我

相关文章:

你感兴趣的文章:

标签云: