zoukankan      html  css  js  c++  java
  • ListView使用的时候遇到的一些问题

    昨天在做项目时,请求服务器的好友动态后,将好友动态和评论显示到界面上,用ListView显示,发现一进这个界面时,listView的适配器的getVIew()方法就会执行6次,后来发现原来是ListView的宽高写的有问题,开始写的是宽为match_parent,高为包裹内容,这样就出现了问题,之后把ListView的宽高都改为了match_parent,getView()方法就正常执行了,界面布局改为了这样:

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
                  xmlns:tools="http://schemas.android.com/tools"
                  android:orientation="vertical"
                  android:layout_width="match_parent"
                  android:layout_height="match_parent"
                  android:paddingStart="5dp"
                  android:paddingEnd="5dp"
                  android:background="@color/base_background_color">
    
        <ListView
            android:id="@+id/lv_fragment_friends"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:clipToPadding="false"
            android:divider="@android:color/transparent"
            android:dividerHeight="10dp"
            android:paddingBottom="10dp"
            android:scrollbarStyle="outsideOverlay">
    
        </ListView>
    
    </LinearLayout>

    然后我要把分享信息的评论动态用代码添加到ListView的每个item里面,item布局如下:

    部分代码:

    //messageFragment的二级fragment
    public class Message_Friends_Fragment extends Fragment {
        /**
         * 自定义的观察者
         */
        public MyObserver mObserver;
        /**
         * 从服务器获取的所有的好友分享的动态的集合
         */
        private List<Resquest_friends_info.EveryShareInfo> mResults_list;
    
        /**
         * ListVIew当前的条目
         */
        public static int CURRENT_ITEM = 0;
        @Bind(R.id.lv_fragment_friends)
        ListView mListView;
    
        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
            View view = inflater.inflate(R.layout.fragment_message_firends, null);//ViewGroup ?
            ButterKnife.bind(this, view);
    
            mObserver = new MyObserver();//创建一个观察者对象
            //创建一个访问网络的Control
            Message_Friends_NetControl control = new Message_Friends_NetControl(this);
            control.getFriendsShareFromServer();//访问网络并且解析Json
    
            mListView.setDivider(null);
    
            return view;
    
        }
    
        class FrendsAdapter extends BaseAdapter {
    
            @Override
            public int getCount() {
                return mResults_list.size();
            }
    
            @Override
            public Object getItem(int i) {
                return mResults_list.get(i);
            }
    
            @Override
            public long getItemId(int i) {
                return i;
            }
    
            @Override
            public View getView(int i, View convertView, ViewGroup viewGroup) {
                Log.d("msg", "getView()");
                ViewHolder holder;
                if (convertView != null) {
                    holder = (ViewHolder) convertView.getTag();
                } else {
                    convertView = View.inflate(UIUtils.getContext(), R.layout.lv_item_message_friends, null);
                    holder = new ViewHolder(convertView);
                    convertView.setTag(holder);
                }
                //获取某条分享的动态
                Resquest_friends_info.EveryShareInfo info = mResults_list.get(i);
    //            Log.d("msg","现在是第几个动态?"+"--->"+i);
                //获取当前分享动态的所有回复的集合
                ArrayList<Resquest_friends_info.EveryShareInfo.Reply> replys = info.getPub_com();
    //            Log.d("msg","评论总数--->"+replys.size());
                for (Resquest_friends_info.EveryShareInfo.Reply reply : replys) {
                    Log.d("msg",reply.getPc_txt()+"--->"+reply.getPc_name());//评论的内容以及顺序全是正确的
                }
                Log.d("msg", "第几个条目?++------------------------------------------------" + i);
                //动态添加评论之前先移除评论线性布局里的所有评论,因为这个线性布局可能是复用的之前item的,所以要先移除线性布局里原来的评论
                holder.ll_comment_message_friends.removeAllViews();
                for(int j=0;j<replys.size();j++){
                    TextView textView = new TextView(UIUtils.getContext());//new 一条评论
                    textView.setText(replys.get(j).getPc_name()+": "+replys.get(j).getPc_txt());//设置评论人的名字和评论的内容
                    textView.setTextColor(Color.BLACK);
                    holder.ll_comment_message_friends.addView(textView);
                }
    
    
                holder.tvUserName.setText(info.getPub_frd_name());//设置好友动态分享者的名字
                Log.d("msg","tvUserName是否同一对象?---->"+holder.tvUserName.toString());
                holder.tvTime.setText(info.getPub_datetime());//设置分享这条动态的时间
                holder.tvSaySth.setText(info.getPub_context());//设置分享动态的内容
                //显示用户头像
                ImageLoader.getInstance().displayImage(GlobalConstant.SERVER_URL + "/" + info.getPub_frd_head(), holder.ivUserFace);
    
                return convertView;
            }
        }
        //holder里面的对象,每个item都是这个对象,只不过内容不同
        static class ViewHolder {
            @Bind(R.id.iv_friends_face)
            ImageView ivUserFace;//用户头像
            @Bind(R.id.tv_user_name)
            TextView tvUserName;//用户名字
            @Bind(R.id.tvTime_friends)
            TextView tvTime;//时间
            @Bind(R.id.tvSaySth)
            TextView tvSaySth;//说点什么
            @Bind(R.id.iv_friends_friends_pic)
            ImageView iv_friends_friends_pic;//发的具体图片
            /**
             * 用来放评论的线性布局
             */
            @Bind(R.id.ll_comment_message_friends)
            LinearLayout ll_comment_message_friends;
    
    
            public ViewHolder(View view) {
                ButterKnife.bind(this, view);
            }
        }
  • 相关阅读:
    BZOJ 2565 最长双回文串 (Manacher)
    BZOJ 3881 [COCI2015]Divljak (Trie图+Fail树+树链的并+树状数组维护dfs序)
    BZOJ 3530 [SDOI2014]数数 (Trie图/AC自动机+数位DP)
    BZOJ 1444 [JSOI2009]有趣的游戏 (Trie图/AC自动机+矩阵求逆)
    BZOJ 1195 [HNOI2006]最短母串 (Trie图+状压+bfs最短路)
    luogu P5289 [十二省联考2019]皮配
    luogu P5285 [十二省联考2019]骗分过样例
    luogu P5294 [HNOI2019]序列
    luogu P5292 [HNOI2019]校园旅行
    luogu P5284 [十二省联考2019]字符串问题
  • 原文地址:https://www.cnblogs.com/android-yus/p/5066464.html
Copyright © 2011-2022 走看看