LISTVIEW嵌套GRIDVIEW的一些处理(点击GRIDVIEW的条目,能够显示他在LISTVIEW中的位置)(对这篇文章的优化处理,不每次都new onItemClickListener)

前几天写了点击GRIDVIEW的条目,能够显示他在LISTVIEW中的位置,当时的处理是在ListView的适配器里的GetView方法里每次都new GridView的onItemClickListener,这样显然是不合理的,

/**GridVIew的条目点击监听*/
    private GvOnItemClickListener mGvOnItemClickListener;//成员

这是Fragment的入口:

 @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_Net_Control control = new Message_Net_Control(this);
        control.getFriendsShareFromServer();//访问网络并且解析Json
        mListView.setDivider(null);

        mGvOnItemClickListener=new GvOnItemClickListener();

    return view;
    }

这是ListView的适配器的GetView方法:

@Override
        public View getView(int i, View convertView, ViewGroup viewGroup) {
            final 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);
            }

            //获取某条分享的动态
            Message_Responce_Info.EveryShareInfo info = mResults_list.get(i);
            //获取当前分享动态的所有回复的集合
            ArrayList<Message_Responce_Info.EveryShareInfo.Reply> replys = info.getPub_com();
            //动态添加评论之前先移除评论线性布局里的所有子View
            holder.ll_comment_message_friends.removeAllViews();
            for (int j = 0; j < replys.size(); j++) {
                TextView textView = new TextView(UIUtils.getContext());
                textView.setPadding(0, 8, 0, 0);
                textView.setText(replys.get(j).getPc_name() + ": " + replys.get(j).getPc_txt());
                textView.setTextColor(Color.DKGRAY);
                holder.ll_comment_message_friends.addView(textView);
            }

            holder.tvUserName.setText(info.getPub_frd_name());//设置好友动态分享者的名字
            holder.tvTime.setText(info.getPub_datetime());//设置分享这条动态的时间
            holder.tvSaySth.setText(info.getPub_context());//设置分享动态的内容


            ArrayList<String> small_pics = info.getPub_th_img();//说说图片的缩略图集合
 holder.gv.setTag(i);//给当前的GridView设置一个位置标记 //在设置GridVIewAdapter的时候先传进去listView的条目位置
            Message_Friends_GridViewAdapter gridAdapter = new Message_Friends_GridViewAdapter(small_pics);
            holder.gv.setAdapter(gridAdapter);//设置GridView的适配器

            //给GridView设置条目点击监听
            holder.gv.setOnItemClickListener(mGvOnItemClickListener);

            //显示用户头像
            ImageLoader.getInstance().displayImage(GlobalConstant.SERVER_URL + "/" + info.getPub_frd_head(), holder.ivUserFace);

            return convertView;
        }

点击监听,在成员里

 /**自定义的GridView的点击监听*/
    class GvOnItemClickListener implements AdapterView.OnItemClickListener{
        /**
         *
         * @param adapterView 相当于Holder,ListVIew的条目,在这里相当于ListView里的GridViewEx
         * @param view 表示GridView的条目
         * @param position GridVIew里的条目位置
         * @param l
         */
        @Override
        public void onItemClick(AdapterView<?> adapterView, View view, int position, long l) {
            int lv_item_position= (Integer) adapterView.getTag();//GridView在ListView条目里的位置 //点击的这条说说信息
            Message_Responce_Info.EveryShareInfo shareInfo = mResults_list.get(lv_item_position);
            ArrayList<String> big_pics = shareInfo.getPub_img();//大图集合
            Intent intent = new Intent(UIUtils.getContext(), MessageImageShowActivity.class);
            intent.putStringArrayListExtra("bigPics",big_pics);//把说说图片的大图集合传过去
            intent.putExtra("bigPicPostion",position);//把点击的那个说说图片位置传过去
            startActivity(intent);
        }
    }

这样每次只new 一个onItemClickListener,并且也达到了效果。

 

你可能感兴趣的:(LISTVIEW嵌套GRIDVIEW的一些处理(点击GRIDVIEW的条目,能够显示他在LISTVIEW中的位置)(对这篇文章的优化处理,不每次都new onItemClickListener))