fragment的基本用法

1.首先创建一个UI线程

public class MainActivity extends AppCompatActivity implements RadioGroup.OnCheckedChangeListener {

    private HomeFragment mHomeFragment;
    private DmFragment mDmFragment;
    private SearchFragment mSearchFragment;
    private PersonalFragment mPersonalFragment;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        //主流的 底部tab切换页面的设计
        RadioGroup group = (RadioGroup)findViewById(R.id.main_tab_bar);
        FragmentManager manager = getSupportFragmentManager();

        Fragment f = manager.findFragmentByTag("home");

        if (group != null) {
            group.setOnCheckedChangeListener(this);
        }
        // 1.创建所有的Fragment对象 便于切换的是时候使用
        if (f == null){
            mHomeFragment = new HomeFragment();
        }else{
            mHomeFragment = (HomeFragment) f;
        }
        f = manager.findFragmentByTag("dm");
        if (f == null){
            mDmFragment = new DmFragment();
        }else {
            mDmFragment = (DmFragment) f;
        }
        f = manager.findFragmentByTag("search");
        if (f == null){
            mSearchFragment = new SearchFragment();
        }else{
            mSearchFragment = (SearchFragment) f;
        }
        f = manager.findFragmentByTag("personal");
        if (f == null){

            mPersonalFragment = new PersonalFragment();
        }else{
            mPersonalFragment = (PersonalFragment) f;
        }
        //2.每一个Fragment 可以通过两种方式添加到activity
        // 1)使用<Fragment> 标签添加
        // 2)使用代码来添加Fragment
//        FragmentManager manager = getSupportFragmentManager();
//        FragmentTransaction tx = manager.beginTransaction();
//
//        tx.add(R.id.fragment_container,mHomeFragment);
//        tx.commit();
        //使用默认的方式
        group.check(R.id.main_tab_home);

    }

    public void bntJumpNext(View view) {
        Intent intent = new Intent(this, SeconedActivity.class);
        startActivity(intent);

    }

    @Override
    public void onCheckedChanged(RadioGroup group, int checkedId) {
        FragmentManager manager = getSupportFragmentManager();
        FragmentTransaction tx = manager.beginTransaction();

        switch (checkedId) {
            case R.id.main_tab_home:
//                tx.replace(R.id.fragment_container,mHomeFragment);
                tx.replace(R.id.fragment_container,mHomeFragment,"home");
                break;
            case R.id.main_tab_dm:
//                tx.replace(R.id.fragment_container,mDmFragment);
                tx.replace(R.id.fragment_container,mDmFragment,"dm");
                break;
            case R.id.main_tab_search:
                tx.replace(R.id.fragment_container,mSearchFragment,"search");
                break;
            case R.id.main_tab_personal:
                tx.replace(R.id.fragment_container,mPersonalFragment,"personal");
                break;
        }
        tx.commit();
    }
}
2) 该UI线程的布局文件

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:orientation="vertical"
    tools:context="com.wwj_fly.myfragment.MainActivity">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Hello World!"/>
    <fragment
        class="com.wwj_fly.myfragment.fragments.TimeFragment"
        android:id="@+id/fragment_time_0"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"

        />
    <fragment
        class="com.wwj_fly.myfragment.fragments.TimeFragment"
        android:id="@+id/fragment_time_1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        />
    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:onClick="bntJumpNext"
        />
    <!--使用FrameLayout 来显示 Fragment-->
    <FrameLayout
        android:id="@+id/fragment_container"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1"></FrameLayout>
    <!--通常tab 样式的切换-->
    <RadioGroup
        android:id="@+id/main_tab_bar"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal">
       <RadioButton
           android:id="@+id/main_tab_home"
           android:layout_width="0dp"
           android:layout_weight="1"
           android:text="首页"
           android:layout_height="wrap_content"/>
        <RadioButton
            android:id="@+id/main_tab_dm"
           android:layout_width="0dp"
           android:layout_weight="1"
           android:text="私信"
           android:layout_height="wrap_content"/>
        <RadioButton
            android:id="@+id/main_tab_search"
            android:layout_width="0dp"
            android:layout_weight="1"
            android:text="搜索"
            android:layout_height="wrap_content"/>
        <RadioButton
            android:id="@+id/main_tab_personal"
            android:layout_width="0dp"
            android:layout_weight="1"
            android:text="我的"
            android:layout_height="wrap_content"/>

    </RadioGroup>
</LinearLayout>
2.创建fragment

/*
* Fragment 的创建步骤:
*
* 1.继承 Fragment v4 包的
* 2.必须有且仅有一个无参的构造方法
* 3.如果fragment需要显示界面的话 需要重写 onCreateView方法
* 4.制定布局资源 或者创建布局 返回即可
* */
public class TimeFragment extends Fragment implements Runnable{

    private TextView mTextDate;
    private TextView mTextTime;

    private Handler mHandler = new Handler(){
        @Override
        public void handleMessage(Message msg) {
            //message内部的what
            // 假定 998 是设置日期的
            String str = (String) msg.obj;
            switch (msg.what) {
                case 998:
                    mTextDate.setText(str);
                    break;
                case 999:
                    mTextTime.setText(str);
                    break;
            }

        }
    };
    public TimeFragment() {
    }
    // 返回 Fragment的界面部分 和Adapter的getView 方法类似
    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View ret = inflater.inflate(R.layout.time_fragment, container, false);
        // 在 onCreateView内部 可以设置控件的内容 开启线程 连接网络

        mTextDate = (TextView)ret.findViewById(R.id.txt_date);
        mTextTime = (TextView) ret.findViewById(R.id.txt_time);

        Date date = new Date();
        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
        mTextDate.setText(format.format(date));

        format.applyPattern("HH:mm:ss");
        mTextTime.setText(format.format(date));
        //启动一个线程
        Thread thread = new Thread(this);
        thread.start();

        return ret;
    }

    @Override
    public void run() {
        try{
            Calendar calendar = Calendar.getInstance();
            StringBuilder sb = new StringBuilder();
            while(true){
                calendar.setTimeInMillis(System.currentTimeMillis());
                int year = calendar.get(Calendar.YEAR);
                int month = calendar.get(Calendar.MONTH);
                int date = calendar.get(Calendar.DATE);
                int hour = calendar.get(Calendar.HOUR_OF_DAY);
                int min = calendar.get(Calendar.MINUTE);
                int sec = calendar.get(Calendar.SECOND);
                sb.append(year).append('-').append(month + 1)
                        .append('-').append(date);
                String str = sb.toString();
                Message message = mHandler.obtainMessage(998);
                message.obj = str;
                //子线程需要通过Handler 给主线程发送消息
                mHandler.sendMessage(message);

                // 时间的部分
                sb.setLength(0);
                sb.append(hour).append(':').append(min).append(':').append(sec);
                str = sb.toString();

                message = mHandler.obtainMessage(999);
                message.obj = str;
                mHandler.sendMessage(message);
                sb.setLength(0);
                Thread.sleep(1000);
            }
        }catch (InterruptedException ex){
            ex.printStackTrace();
        }
    }
}

2)对应的布局文件

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:orientation="vertical"
              android:layout_width="match_parent"
              android:layout_height="match_parent">
    <TextView
        android:id="@+id/txt_date"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="2016-09-13"
        />
    <TextView
        android:id="@+id/txt_time"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="10:00:00"/>


</LinearLayout>




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值