Android开发-在Activity中,左右平均布局fragment的实现

1. 简介:

Android Fragment已经被应用程序大量使用。本篇介绍“在Activity中,左右平均布局fragment”的一种实现方式。

2. 效果图:

 

 

3. 源代码:

3.1 activity中的布局文件:

<?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="match_parent"
    android:orientation="horizontal" >

    <fragment class="com.excelsecu.myfragloadertest.LeftFragment"
        android:id="@+id/left_fragment" android:layout_weight="1"
        android:layout_width="0px" android:layout_height="match_parent"
        />

    <fragment class="com.excelsecu.myfragloadertest.RightFragment"
        android:id="@+id/right_fragment" android:layout_weight="1"
        android:layout_width="0px" android:layout_height="match_parent"
        />

</LinearLayout>

说明:

(1)顶层布局文件使用LinearLayout,并且是左右排列:

android:orientation="horizontal";

(2)直接在xml中定义两个Fragment的布局,需要设置

android:layout_weight=“1”,平均分割;

3.2 列表item的布局:

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


<TextView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@android:id/text1"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:textAppearance="?android:attr/textAppearanceListItemSmall"
    android:gravity="center_vertical"
    android:paddingStart="?android:attr/listPreferredItemPaddingStart"
    android:paddingEnd="?android:attr/listPreferredItemPaddingEnd"
    android:minHeight="?android:attr/listPreferredItemHeightSmall" />

说明:

item只有一个TextView文本。

3.3LeftFragment代码:

package com.excelsecu.myfragloadertest;

import android.app.Activity;
import android.app.AlertDialog;
import android.app.FragmentTransaction;
import android.app.ListFragment;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ListView;

public class LeftFragment extends ListFragment {
    boolean mDualPane;
    int mCurCheckPosition = 0;

    private static String[] array = {
            "02-01,", "02-02", "02-03", "02-04", "02-05", "02-06", "02-07",
            "02-08","02-09", "02-10", "02-11", "02-12", "02-13", "02-14",
            "02-15", "02-16","02-17,", "02-18", "02-19", "02-20", "02-21",
            "02-22", "02-23", "02-24","02-25", "02-26", "02-27", "02-28"};

    @Override
    public void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        System.out.println("Fragment-->onCreate");
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        System.out.println("Fragment-->onCreateView");
        return super.onCreateView(inflater, container, savedInstanceState);
    }

    @Override
    public void onPause() {
        // TODO Auto-generated method stub
        super.onPause();
        System.out.println("Fragment-->onPause");
    }

    @Override
    public void onStop() {
        // TODO Auto-generated method stub
        super.onStop();

        System.out.println("Fragment-->onStop");
    }

    @Override
    public void onAttach(Activity activity) {
        // TODO Auto-generated method stub
        super.onAttach(activity);
        System.out.println("Fragment-->onAttach");
    }

    @Override
    public void onStart() {
        // TODO Auto-generated method stub
        super.onStart();
        System.out.println("Fragment-->onStart");
    }

    @Override
    public void onResume() {
        // TODO Auto-generated method stub
        super.onResume();
        System.out.println("Fragment-->onResume");
    }

    @Override
    public void onDestroy() {
        // TODO Auto-generated method stub
        super.onDestroy();
        System.out.println("Fragment-->onDestroy");
    }

    @Override
    public void onActivityCreated(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onActivityCreated(savedInstanceState);
        System.out.println("Fragment-->onActivityCreted");
        setListAdapter(new ArrayAdapter<String>(getActivity(),
                android.R.layout.simple_list_item_1, array));

        View detailsFrame = getActivity().findViewById(R.id.details);

        mDualPane = detailsFrame != null
                && detailsFrame.getVisibility() == View.VISIBLE;

        if (savedInstanceState != null) {
            mCurCheckPosition = savedInstanceState.getInt("curChoice", 0); // 从保存的状态中取出数据
        }

        if (mDualPane) {
            getListView().setChoiceMode(ListView.CHOICE_MODE_SINGLE);

            showDetails(mCurCheckPosition);
        }
    }

    @Override
    public void onSaveInstanceState(Bundle outState) {
        // TODO Auto-generated method stub
        super.onSaveInstanceState(outState);

        outState.putInt("curChoice", mCurCheckPosition);// 保存当前的下标
    }

    @Override
    public void onListItemClick(ListView l, View v, int position, long id) {
        // TODO Auto-generated method stub
        super.onListItemClick(l, v, position, id);
        showDetails(position);
    }

    void showDetails(int index) {
        mCurCheckPosition = index;
        if (mDualPane) {
            getListView().setItemChecked(index, true);
            DetailsFragment details = (DetailsFragment) getFragmentManager()
                    .findFragmentById(R.id.details);
            if (details == null || details.getShownIndex() != index) {
                details = DetailsFragment.newInstance(mCurCheckPosition);

                // 得到一个fragment 事务(类似sqlite的操作)
                FragmentTransaction ft = getFragmentManager()
                        .beginTransaction();
                ft.replace(R.id.details, details);// 将得到的fragment
                // 替换当前的viewGroup内容,add则不替换会依次累加
                ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);// 设置动画效果
                ft.commit();// 提交
            }
        } else {
            new AlertDialog.Builder(getActivity()).setTitle(
                    android.R.string.dialog_alert_title).setMessage(
                    MyFragmentDemoActivity.array[index]).setPositiveButton(android.R.string.ok,
                    null).show();
        }
    }
}

 说明:

(1)继承自ListFragment;

(2)array定义了数据;

(3)setListAdapter:适配器,用于将数据和ui进行绑定;

 (4)onListItemClick:点击iteml时会调用这个方法;

(5)onActivityCreated:Fragment生命周期管理相关的一个方法,当Actiivty被创建后,这个方法会被调用。

3.4RightFragment代码: 

同“LeftFragment”,只是数据array不一样。


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

liranke

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值