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

时间:2023-11-29 21:43:32

前几天写了点击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,并且也达到了效果。