1. 程式人生 > >為側滑設定listview多條目,並與viewpager互動聯絡

為側滑設定listview多條目,並與viewpager互動聯絡

MainActivity:

## 側滑的listview條目和viewpager的fragment進行互動聯絡,是兩個fragment之間的聯絡。通過Activity作為中間人。

## 在Activity定義一個方法:
	//position:listview條目
 public void showPage(int position){
      viewPager.setCurrentItem(position);    //viewpager跳到指定的fragment
      drawer.closeDrawer(Gravity.START);    //同時關掉側拉
}

為側滑設定多條目和條目的點選事件:

package com.example.work9_10;

import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
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 me.maxwin.view.XListView;

public class leftFragment extends Fragment {
//定義變數
private ListView xListView;
private LeftAdapter adapter;
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view=inflater.inflate(R.layout.leftfragment,container,false);
//獲取資源ID
xListView=view.findViewById(R.id.xListView);
initData();
return view;
}

private void initData() {
    //介面卡
 adapter=new LeftAdapter(getActivity());
 xListView.setAdapter(adapter);

 //讓側滑的fragment條目和Viewpager的fragment進行互動
    xListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView <?> parent, View view, int position, long id) {
           if (position==0){
               return;
           }
           //************************position-1
            ((MainActivity)getActivity()).showPage(position-1);

        }
    });

}

}

ListView的介面卡:

## 在介面卡內進行多條目展示判斷(一個ImageView和三個TextView)
package com.example.work9_10;

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;

public class LeftAdapter extends BaseAdapter {
private Context con;
private String[] menus={“我的”,“遊戲”,“視訊”};

public LeftAdapter(Context con) {
    this.con = con;
}

//多條目

@Override
public int getViewTypeCount() {
    return 2;
}

@Override
public int getItemViewType(int position) {
    return position==0?0:1;
}

//-----------------------------------------------------
@Override //*************
public int getCount() {
//ImageView+TextView
return menus.length+1;
}

@Override		//***************
public String getItem(int position) {
   if (position==0){
       return null;
   }
   //減去ImageView
   return menus[position-1];
}

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

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    ViewHolder holder;
    if (convertView==null){
        convertView=LayoutInflater.from(con)
           .inflate(**getItemViewType(position)==0?R.layout.has_image:R.layout.no_image**,parent,false);
        holder=new ViewHolder();
        holder.textView=convertView.findViewById(R.id.textview);
        convertView.setTag(holder);
    }else {
        holder= (ViewHolder) convertView.getTag();
    }
//********************
    if (getItemViewType(position)==1){
        holder.textView.setText(getItem(position));
    }

    return convertView;
}

class ViewHolder{
    TextView textView;
}

}

ListView展示的兩種條目的XML:

no_image:

<?xml version="1.0" encoding="utf-8"?>

<android.support.constraint.ConstraintLayout
xmlns:android=“http://schemas.android.com/apk/res/android” android:layout_width=“match_parent”
android:layout_height=“match_parent”>

</android.support.constraint.ConstraintLayout>

has_image:

<?xml version="1.0" encoding="utf-8"?>

<android.support.constraint.ConstraintLayout xmlns:android=“http://schemas.android.com/apk/res/android
android:layout_width=“match_parent”
android:layout_height=“match_parent”
xmlns:app=“http://schemas.android.com/apk/res-auto”>

<ImageView
    android:id="@+id/image"
    android:layout_width="150dp"
    android:layout_height="150dp"
    app:layout_constraintLeft_toLeftOf="parent"
    app:layout_constraintRight_toRightOf="parent"
    app:layout_constraintTop_toTopOf="parent"
    app:layout_constraintBottom_toBottomOf="parent"
    android:background="@mipmap/ic_launcher"
    />

</android.support.constraint.ConstraintLayout>