1. 程式人生 > >Fragment中ListView的Item的點選事件(包含Item內部控制元件的點選事件)

Fragment中ListView的Item的點選事件(包含Item內部控制元件的點選事件)

程式碼記錄在部落格上,分享給想我一樣的菜鳥們,自己忘了的時候也可以拿來看看,免得到處找程式碼:
Fragment中ListView的程式碼

package com.example.administrator.myapplication14.Fragment;


import android.content.Intent;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import
android.view.ViewGroup; import android.widget.AdapterView; import android.widget.ListView; import android.widget.Toast; import com.example.administrator.myapplication14.Adapter.MyCommendAdapter; import com.example.administrator.myapplication14.R; import com.example.administrator.myapplication14.be.MessageCommend; import
java.util.ArrayList; import java.util.List; /** * @author BULUSILI * @描述 訊息--評論 * @專案名稱 寵物圈 * @包名 com.example.administrator.myapplication14.be * @未知 2016-8-9 09:20 */ public class CommentFragment extends Fragment { public ListView mListView; View v; MyCommendAdapter mAdapter; List<MessageCommend> mList; //new的例項時候一定要寫在onCreateView裡面,不然效果會不一樣哦
Intent mIntent; public static CommentFragment newInstance() { CommentFragment fragment = new CommentFragment(); return fragment; } public CommentFragment() { // Required empty public constructor } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { v = inflater.inflate(R.layout.fragment_comment, null); initView(); initData(); initAdapter(); return v; } private void initView() { mListView = (ListView) v.findViewById(R.id.message_commend_lv); } //新增bean類資料臨時的先新增,再連資料庫 private void initData() { mList = new ArrayList<>(); for (int i = 0; i < 10; i++) { MessageCommend message = new MessageCommend("http://img0.imgtn.bdimg.com/it/u=1717816186,2947076118&fm=21&gp=0.jpg", "小強" + i, "你好", "23:23"); mList.add(message); //item的點選事件,裡面可以設定跳轉並傳值 mListView.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) { Toast.makeText(getActivity(), "第" + i + "行", Toast.LENGTH_LONG).show(); } }); } } private void initAdapter() { //傳兩個引數過去 1、上下文 2、集合 mAdapter = new MyCommendAdapter(getActivity(), mList); mListView.setAdapter(mAdapter); } }

介面卡程式碼,我的Item內部有個頭像,點選頭像要跳轉到其他頁面。點選事件和跳轉傳值就寫在介面卡裡面:

package com.example.administrator.myapplication14.Adapter;

import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;
import com.example.administrator.myapplication14.Activity.Main2Activity;
import com.example.administrator.myapplication14.R;
import com.example.administrator.myapplication14.be.MessageCommend;
import java.util.List;


/**
 * @author BULUSILI
 * @描述 訊息評論介面卡
 * @專案名稱
 * @包名 com.example.administrator.myapplication14.Adapter
 * @2016/8/9--14:52
 */
public class MyCommendAdapter extends BaseAdapter {
    List<MessageCommend> mList;
    Context mContext;

    public MyCommendAdapter(Context context, List<MessageCommend> list) {
        mList = list;
        mContext = context;
    }

    @Override
    public int getCount() {
        return mList.size();
    }

    @Override
    public Object getItem(int i) {
        return mList.get(i);
    }

    @Override
    public long getItemId(int i) {
        return i;
    }

    ViewHolder mHolder;

    @Override
    public View getView(final int position, View view, ViewGroup viewGroup) {
        mHolder = new ViewHolder();
        if (view == null) {
            view = LayoutInflater.from(mContext).inflate(R.layout.commend_state, null);
            mHolder.mImageView = (ImageView) view.findViewById(R.id.commend_item_tou_xiang);
            mHolder.tv1 = (TextView) view.findViewById(R.id.commend_item_name);
            mHolder.tv2 = (TextView) view.findViewById(R.id.commend_item_content);
            mHolder.tv3 = (TextView) view.findViewById(R.id.commend_item_time);
            view.setTag(mHolder);
        } else {
            mHolder = (ViewHolder) view.getTag();
        }
        //如果沒有這些內容,將會顯示佈局檔案中的內容
        mHolder.mImageView.setImageResource(R.mipmap.ic_launcher);
        mHolder.tv1.setText(mList.get(position).getName());
        mHolder.tv2.setText(mList.get(position).getText());
        mHolder.tv3.setText(mList.get(position).getTime());
        //頭像的點選事件並傳值
        mHolder.mImageView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
            //開始傳值
                Intent intent=new Intent(mContext, Main2Activity.class);
                Bundle bundle=new Bundle();
                bundle.putSerializable("key",mList.get(position));
                intent.putExtras(bundle);
                //利用上下文開啟跳轉
                mContext.startActivity(intent);
            }
        });
        return view;
    }

    class ViewHolder {
        ImageView mImageView;
        TextView tv1;
        TextView tv2;
        TextView tv3;
    }
}

佈局檔案如下只顯示下Itemde 佈局了:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:layout_width="match_parent"
              android:layout_height="wrap_content"
              android:orientation="horizontal"
              android:padding="10dp">
    <!-- 訊息中心普通訊息的佈局  -->
    <RelativeLayout
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_weight="2">

        <ImageView
            android:id="@+id/commend_item_tou_xiang"
            android:layout_width="45dp"
            android:layout_height="45dp"
            android:src="@drawable/messagescenter_at"/>
    </RelativeLayout>
    <!-- 姓名、訊息內容    -->
    <LinearLayout
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_weight="7"
        android:orientation="vertical">
        <!-- 姓名    -->
        <TextView
            android:id="@+id/commend_item_name"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="小凡"
            android:textSize="18sp"/>
        <!-- 訊息內容    -->
        <TextView
            android:id="@+id/commend_item_content"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="小凡你好小凡你好小凡你好小凡你好小凡你好小凡你好"
            android:singleLine="true"
            android:textSize="14sp"/>
    </LinearLayout>
    <RelativeLayout
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_weight="2">
        <!-- 接收訊息時間   -->
        <TextView
            android:id="@+id/commend_item_time"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="2016-12"/>
    </RelativeLayout>

</LinearLayout>

在跳轉到的介面接收值:

TextView textView= (TextView) findViewById(R.id.textview333);
        Intent intent=getIntent();
        Bundle bundle=intent.getExtras();
        if (bundle!=null){
            mMessageCommend =
                    (MessageCommend) bundle.getSerializable("key");
        }
        textView.setText(mMessageCommend.getName());

效果圖:
這裡寫圖片描述
點選頭像跳到相關頁面
這裡寫圖片描述