東川印記

一本東川,笑看爭龍斗虎;寰茫兦者,度橫佰昧人生。

listView内绑定数据时遇到的问题

2014年4月18日星期五



listView里面定义了几个自定义控件,然后发现点击的时候listView item click不管用了,被子控件监听了。。。。


点击里面内容,白色的文字被自定义控件TextView监听,白色的图片被gridview item监听

然后,百度谷歌一下,
在整个父布局上,加上
android:descendantFocusability="blocksDescendants"
这个属性有三个值,

第三个是覆盖子控件直接覆盖焦点,然后test一下,发现子如果设置了

这个,那么listView就取不到焦点了,注释掉就取到了。
以上为1
-----------------------------------------------------------------------------------
纠结了好几天的问题,
listView里面有动态的图片,微博配图什么的,有的一张有的两张有的三四五六九张,而且还是网络图片,
一开始,直接

。。。。一开始是直接setViewBinder,然后自定义了一个ViewBinder,
  1. /*
  2.      * (non-Javadoc)
  3.      *
  4.      * @see
  5.      * android.widget.SimpleAdapter.ViewBinder#setViewValue(android.view.View,
  6.      * java.lang.Object, java.lang.String)
  7.      */
  8.     @Override
  9.     public boolean setViewValue(View view, Object data,String textRepresentation) {
  10.         try {
  11.             Logger.e("viewBinder单独方法");
  12.               LinearLayout ll = null;
  13.               ArrayList<String>  list = null;
  14.            
  15.               Logger.w("进入数据绑定:"+view+"data"+data+"网图:"+(view instanceof ImageView && data instanceof Bitmap)+
  16.                       "多图:"+(view instanceof LinearLayout && data instanceof ArrayList)+"转发:"+(view instanceof LinearLayout && data instanceof Status));
  17.             // if(null == data)return false;
  18.             if (view instanceof ImageView && data instanceof Bitmap) {
  19.                 Logger.e("bind----网图");
  20.                 // 网图
  21.                 ImageView iv = (ImageView) view;
  22.                 iv.setImageBitmap((Bitmap) data);
  23.                 return true;
  24.             } else if (view instanceof LinearLayout && data instanceof ArrayList) {
  25.                 Logger.e("bind---- 多图:"+data);
  26.                 // 多图
  27.                  ll = (LinearLayout) view;
  28.                  list = (ArrayList<String>) data;
  29.                  loadImageSync(ll,list);
  30.                 return true;
  31.             } else if (view instanceof LinearLayout && data instanceof Status) {
  32.                 // 转发
  33.                 Status s = (Status) data;
  34.                 Logger.e("bind---- 转发:"+s.id);
  35.                  list  = s.pic_urls;
  36.                 if (!"-1".equals(s.id)) {
  37.                     ll = (LinearLayout) view;
  38.                     ll.setBackgroundResource(R.drawable.timeline_retweet_background_highlighted);
  39.                     TextView tv = new TextView(context);
  40.                     tv.setText(Html.fromHtml("@" + s.user.name + ":" + s.text));
  41.                     ll.addView(tv);
  42.                    
  43.                     if (null != list && (!list.isEmpty())) {
  44.                         loadImageSync(ll,list);
  45.                     }
  46.                 }
  47.                 return true;
  48.             }
  49.         } catch (Exception e) {
  50.             e.printStackTrace();
  51.         }
  52.         return false;
  53.     }
  54.    
  55.    
  56.     //TODO 该方法有问题,会造成转发微博加载显示两条
  57.     private void loadImageSync(final LinearLayout ll,   final ArrayList<String> list){
  58.         new Thread(new Runnable() {
  59.             @Override
  60.             public void run() {
  61.                 for (  String str : list) {
  62.                     //Logger.w("for循环图片地址:"+str);
  63.                     Bitmap bt = GeneralUtils.getBitmap(str);
  64.                     final ImageView iv = new ImageView(context);
  65.                     iv.setImageBitmap(bt);
  66.                     final TextView tv = new TextView(context);
  67.                     tv.setText(str);
  68.                    
  69.                    
  70.                     ll.post(new Runnable() {
  71.                        
  72.                         @Override
  73.                         public void run() {
  74.                             Logger.e("布局:"+ll.getId() +"增加"+tv.getText());
  75.                             ll.addView(iv);
  76.                             ll.addView(tv);
  77.                         }
  78.                     });
  79.                 }
  80.             }
  81.         }).start();
  82.        
  83.     }
发现里面的内容串行,折腾了好几天,去群里求救,得到了专业名词------>乱窜!
然后试了在初始化adapter的时候初始化布局等等,发现都不行。。
深思良久,终于决定自定义View,图片使用GridView加载。
然后重写了适配器,在适配器里做的viewBinder判断,
好吧,重新看了下,自定义的adapter代码虽然,只不过是直接把SimpleAdapter copy了一下。。。。。
关键还是回到以前这个。

然后会跳到自定义的视图那里

终究在里面完美的执行了啪啪啪~
以上是第二个问题
------------------------------------
现在发现gridView如果图片少的话填充不满,

感觉像面国旗
找了很多方法

试的恶心。。。。
怎么办。。。。。

留待解决!

--
senRsl
2014-04-18 22:46
GMT+8 @Beijing Tongzhou

没有评论 :

发表评论