Fragment常見的幾種切換方式

一培他、前言:

Fragment中常見的切換方式有 4 種,分別是:

  • 使用ViewPager滑動切換跟點擊切換;
  • 使用FrameLayout點擊切換;
  • 使用BottomNavigationView+ViewPager决左;
  • 使用TabLayout+ViewPager滑動點擊切換;

二走贪、使用:

1. ViewPager滑動切換跟點擊切換

package jibaowang.com.myapplicationdemo;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.ImageView;
import java.util.ArrayList;
/**
* 滑動切換Fragment
*/

public class MainActivity extends AppCompatActivity implements View.OnClickListener, ViewPager.OnPageChangeListener {

private ViewPager mContainerVp;
private ArrayList<Fragment> mFragments=new ArrayList<Fragment>();
private MyFragmentPagerAdapter adapter;
private ImageView iv_1;
private ImageView iv_2;
private ImageView iv_3;
private ImageView iv_4;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    iv_1=(ImageView) findViewById(R.id.iv_1);
    iv_2=(ImageView) findViewById(R.id.iv_2);
    iv_3=(ImageView) findViewById(R.id.iv_3);
    iv_4=(ImageView) findViewById(R.id.iv_4);
    iv_1.setOnClickListener(this);
    iv_2.setOnClickListener(this);
    iv_3.setOnClickListener(this);
    iv_4.setOnClickListener(this);

    mContainerVp=(ViewPager) findViewById(R.id.content_fl);
    adapter =new MyFragmentPagerAdapter(getSupportFragmentManager());
    mContainerVp.setAdapter(adapter);
    //1.如果ViewPager沒有設置setOffscreenPageLimit個數(shù)會初始化當前的Fragment和下一個Fragment,往回滑會初始化上一個Fragment.
    //2.如果設置了setOffscreenPageLimit的個數(shù)(不管是幾)所有Fragment會一次加載佛猛,來回滑動不會在初始化Fragment.
    mContainerVp.setOffscreenPageLimit(4);//Fragment一次加載,不會在初始化Fragment
    mContainerVp.setOnPageChangeListener(this);
    iv_1.setSelected(true);
}

@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

}

@Override
public void onPageSelected(int position) {
    switch (position){
        case 0:
            iv_1.setSelected(true);
            iv_2.setSelected(false);
            iv_3.setSelected(false);
            iv_4.setSelected(false);
            break;
        case 1:
            iv_1.setSelected(false);
            iv_2.setSelected(true);
            iv_3.setSelected(false);
            iv_4.setSelected(false);
            break;
        case 2:
            iv_1.setSelected(false);
            iv_2.setSelected(false);
            iv_3.setSelected(true);
            iv_4.setSelected(false);
            break;
        case 3:
            iv_1.setSelected(false);
            iv_2.setSelected(false);
            iv_3.setSelected(false);
            iv_4.setSelected(true);
            break;
    }

}

@Override
public void onPageScrollStateChanged(int state) {

}


@Override
public void onClick(View view) {
    switch (view.getId()){
        case R.id.iv_1:
            mContainerVp.setCurrentItem(0);
            break;
        case R.id.iv_2:
            mContainerVp.setCurrentItem(1);
            break;
        case R.id.iv_3:
            mContainerVp.setCurrentItem(2);
            break;
        case R.id.iv_4:
            mContainerVp.setCurrentItem(3);
            break;
    }
}

class MyFragmentPagerAdapter extends FragmentPagerAdapter {

    public MyFragmentPagerAdapter(FragmentManager fm) {
        super(fm);
        mFragments.add(new HomeFragment());
        mFragments.add(new BraceletFragment());
        mFragments.add(new MineFragment());
        mFragments.add(new MineFragment2());
    }

    @Override
    public Fragment getItem(int position) {
        return mFragments.get(position);
    }

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

}}

布局文件

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">

<android.support.v4.view.ViewPager
    android:id="@+id/content_fl"
    android:layout_width="match_parent"
    android:layout_height="0dp"
    android:layout_weight="1"></android.support.v4.view.ViewPager>

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="30dp">

    <ImageView
        android:id="@+id/iv_1"
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_weight="1"
        android:layout_gravity="center"
        android:src="@drawable/select_home"/>

    <ImageView
        android:id="@+id/iv_2"
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_weight="1"
        android:src="@drawable/select_bracel"/>

    <ImageView
        android:id="@+id/iv_3"
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_weight="1"
        android:src="@drawable/select_mine"/>

    <ImageView
    android:id="@+id/iv_4"
    android:layout_width="0dp"
    android:layout_height="match_parent"
    android:layout_weight="1"
    android:src="@drawable/select_mine2"/>

</LinearLayout>
</LinearLayout>

2. FrameLayout點擊切換

package jibaowang.com.myapplicationdemo;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
import android.support.v4.app.FragmentTransaction;
import android.support.v4.view.ViewPager;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.FrameLayout;
import android.widget.ImageView;
import java.util.ArrayList;
/**
* 點擊切換的Fragment
* 點下面按鈕初始化Fragment,只初始化一次,如果用replace就會每次都初始化Fragment
*
*/

public class MainActivity2 extends AppCompatActivity implements View.OnClickListener{

private ArrayList<Fragment> mFragments=new ArrayList<Fragment>();
private ImageView iv_1;
private ImageView iv_2;
private ImageView iv_3;
private ImageView iv_4;
private BaseFragment mFragmentContent;
private MineFragment2 mMineFragment2;
private MineFragment mMineFragment;
private BraceletFragment mBraceletFragment;
private HomeFragment mHomeFragment;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main2);
    iv_1=(ImageView) findViewById(R.id.iv_1);
    iv_2=(ImageView) findViewById(R.id.iv_2);
    iv_3=(ImageView) findViewById(R.id.iv_3);
    iv_4=(ImageView) findViewById(R.id.iv_4);
    iv_1.setOnClickListener(this);
    iv_2.setOnClickListener(this);
    iv_3.setOnClickListener(this);
    iv_4.setOnClickListener(this);

    initFragment();
    iv_1.performClick();
}


private void switchContent(Fragment from, BaseFragment to) {
    if (mFragmentContent != to) {
        mFragmentContent = to;
        FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
        if (!to.isAdded()) { // 先判斷是否被add過
            transaction.hide(from).add(R.id.content_fl, to).commit();
        } else {
            transaction.hide(from).show(to).commit(); // 隱藏當前的fragment坠狡,顯示下一個
        }
    }
}


@Override
public void onClick(View view) {
    switch (view.getId()){
        case R.id.iv_1:
            switchContent(mFragmentContent,mHomeFragment);
            iv_1.setSelected(true);
            iv_2.setSelected(false);
            iv_3.setSelected(false);
            iv_4.setSelected(false);
            break;
        case R.id.iv_2:
            switchContent(mFragmentContent,mBraceletFragment);
            iv_1.setSelected(false);
            iv_2.setSelected(true);
            iv_3.setSelected(false);
            iv_4.setSelected(false);
            break;
        case R.id.iv_3:
            switchContent(mFragmentContent,mMineFragment);
            iv_1.setSelected(false);
            iv_2.setSelected(false);
            iv_3.setSelected(true);
            iv_4.setSelected(false);
            break;
        case R.id.iv_4:
            switchContent(mFragmentContent,mMineFragment2);
            iv_1.setSelected(false);
            iv_2.setSelected(false);
            iv_3.setSelected(false);
            iv_4.setSelected(true);
            break;
    }
}

private void initFragment() {
    mHomeFragment = new HomeFragment();
    mBraceletFragment = new BraceletFragment();
    mMineFragment = new MineFragment();
    mMineFragment2 = new MineFragment2();
    mFragmentContent = mHomeFragment;//一定要賦值否則會報空指針
    getSupportFragmentManager().beginTransaction().add(R.id.content_fl, mHomeFragment).commit();
}
}

布局文件

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">

<FrameLayout
    android:id="@+id/content_fl"
    android:layout_width="match_parent"
    android:layout_height="0dp"
    android:layout_weight="1"></FrameLayout>

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="30dp">

    <ImageView
        android:id="@+id/iv_1"
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_weight="1"
        android:layout_gravity="center"
        android:src="@drawable/select_home"/>

    <ImageView
        android:id="@+id/iv_2"
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_weight="1"
        android:src="@drawable/select_bracel"/>

    <ImageView
        android:id="@+id/iv_3"
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_weight="1"
        android:src="@drawable/select_mine"/>

    <ImageView
    android:id="@+id/iv_4"
    android:layout_width="0dp"
    android:layout_height="match_parent"
    android:layout_weight="1"
    android:src="@drawable/select_mine2"/>

</LinearLayout>
</LinearLayout>

3. 使用BottomNavigationView+ViewPager

package jibaowang.com.myapplicationdemo;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.design.widget.BottomNavigationView;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentTransaction;
import android.support.v4.view.ViewPager;
import android.support.v7.app.AppCompatActivity;
import android.view.MenuItem;
import java.util.ArrayList;

/**
* 使用BottomNavigationView+ViewPager
* 1.如果是結合ViewPager滑動使用
* 如果ViewPager沒有設置setOffscreenPageLimit個數(shù)會初始化當前的Fragment和下一個Fragment,往回滑會初始化上一個Fragment.
* 如果設置了setOffscreenPageLimit的個數(shù)(不管是幾)所有Fragment會一次加載继找,來回滑動不會在初始化Fragment.
*
* 2.如果結合FrameLayout點擊切換使用
* 點下面按鈕初始化Fragment,只初始化一次,如果用replace就會每次都初始化Fragment
*/

public class MainActivity3 extends AppCompatActivity {

private BottomNavigationView navigation;
private final int FRAGMENT_POSITION_HOME = 0;
private final int FRAGMENT_POSITION_BRACELET = 1;
private final int FRAGMENT_POSITION_MINE = 2;
private final int FRAGMENT_POSITION_MINE2 = 3;
private int tabPosition = 0;
private BaseFragment mFragmentContent;
private HomeFragment mHomeFragment;
private BraceletFragment mBraceletFragment;
private MineFragment mMineFragment;
private MineFragment2 mMineFragment2;
private ViewPager mContainerVp;
private ArrayList<Fragment> mFragments=new ArrayList<Fragment>();
//    private MyFragmentPagerAdapter adapter;
private MenuItem menuItem;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main3);
    navigation=(BottomNavigationView)findViewById(R.id.navigation);
    BottomNavigationViewHelper.disableShiftMode(navigation);
    navigation.setOnNavigationItemSelectedListener(mylistener);
//        mContainerVp=(ViewPager) findViewById(R.id.content_fl);
//        adapter =new MyFragmentPagerAdapter(getSupportFragmentManager());
//        mContainerVp.setAdapter(adapter);
//        mContainerVp.setOffscreenPageLimit(4);
//        mContainerVp.setOnPageChangeListener(this);
    initFragment();
}

private BottomNavigationView.OnNavigationItemSelectedListener mylistener= new BottomNavigationView.OnNavigationItemSelectedListener() {
    @Override
    public boolean onNavigationItemSelected(@NonNull MenuItem item) {
        switch (item.getItemId()){
            case R.id.menu_home:
                tabPosition = FRAGMENT_POSITION_HOME;
//                    mContainerVp.setCurrentItem(0);
                changeSelectTab(tabPosition);
                return true;
            case R.id.menu_bracelet:
                tabPosition = FRAGMENT_POSITION_BRACELET;
//                    mContainerVp.setCurrentItem(1);
                changeSelectTab(tabPosition);
                return true;
            case R.id.menu_mine:
                tabPosition = FRAGMENT_POSITION_MINE;
//                    mContainerVp.setCurrentItem(2);
                changeSelectTab(tabPosition);
                return true;
            case R.id.menu:
                tabPosition = FRAGMENT_POSITION_MINE2;
//                    mContainerVp.setCurrentItem(3);
                changeSelectTab(tabPosition);
                return true;
        }
        return false;
    }
};

private void changeSelectTab(int tabPosition) {
    FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction();
    switch (tabPosition) {
        case FRAGMENT_POSITION_HOME:
            switchContent(mFragmentContent,mHomeFragment);
            break;
        case FRAGMENT_POSITION_BRACELET:
            switchContent(mFragmentContent,mBraceletFragment);
            break;
        case FRAGMENT_POSITION_MINE:
            switchContent(mFragmentContent,mMineFragment);
            break;
        case FRAGMENT_POSITION_MINE2:
            switchContent(mFragmentContent,mMineFragment2);
            break;
    }

    fragmentTransaction.commit();
}

private void switchContent(Fragment from, BaseFragment to) {
    if (mFragmentContent != to) {
        mFragmentContent = to;
        FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
        if (!to.isAdded()) { // 先判斷是否被add過
            transaction.hide(from).add(R.id.content_fl, to).commit();
        } else {
            transaction.hide(from).show(to).commit(); // 隱藏當前的fragment,顯示下一個
        }
    }
}

private void initFragment() {
    mHomeFragment = new HomeFragment();
    mBraceletFragment = new BraceletFragment();
    mMineFragment = new MineFragment();
    mMineFragment2 = new MineFragment2();
    mFragmentContent = mHomeFragment;//一定要賦值否則會報空指針
    getSupportFragmentManager().beginTransaction().add(R.id.content_fl, mHomeFragment).commit();
}


/*    @Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

}

@Override
public void onPageSelected(int position) {
    if (menuItem != null) {
        menuItem.setChecked(false);
    } else {
        navigation.getMenu().getItem(0).setChecked(false);
    }
    menuItem = navigation.getMenu().getItem(position);
    menuItem.setChecked(true);
}

@Override
public void onPageScrollStateChanged(int state) {

}

class MyFragmentPagerAdapter extends FragmentPagerAdapter {

    public MyFragmentPagerAdapter(FragmentManager fm) {
        super(fm);
        mFragments.add(new HomeFragment());
        mFragments.add(new BraceletFragment());
        mFragments.add(new MineFragment());
        mFragments.add(new MineFragment2());
    }

    @Override
    public Fragment getItem(int position) {
        return mFragments.get(position);
    }

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

}*/
}

布局文件

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
          xmlns:app="http://schemas.android.com/apk/res-auto"
          xmlns:tools="http://schemas.android.com/tools"
          android:id="@+id/container"
          android:layout_width="match_parent"
          android:layout_height="match_parent"
          android:orientation="vertical">

<FrameLayout
    android:id="@+id/content_fl"
    android:layout_width="match_parent"
    android:layout_height="0dp"
    android:layout_weight="1"></FrameLayout>

<android.support.design.widget.BottomNavigationView
    android:id="@+id/navigation"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_gravity="bottom"
    app:itemBackground="@color/safe_mode_text"
    app:menu="@menu/navigation" />

</LinearLayout>

4. TabLayout+ViewPager滑動點擊切換

package jibaowang.com.myapplicationdemo;
import android.os.Bundle;
import android.support.design.widget.TabLayout;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.v7.app.AppCompatActivity;
import android.view.ViewGroup;
import java.util.ArrayList;
import java.util.List;
/**
* TabLayout+ViewPager滑動點擊切換
* 進入會初始化當前的Fragment和下一個Fragment,然后往后滑動一個執(zhí)行下一個,只執(zhí)行一次,往回滑不執(zhí)行
*/

public class MainActivity4 extends AppCompatActivity {


ViewPager mContentVp;
TabLayout mTabs;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main4);

    mContentVp = (ViewPager) findViewById(R.id.content_vp);
    mTabs = (TabLayout) findViewById(R.id.tabs);
    initFragment();
}

private void initFragment() {

    List<String> titles = new ArrayList<>();
    titles.add("首頁");
    titles.add("手環(huán)");
    titles.add("我的");
    titles.add("個人");

    for (int i = 0; i < titles.size(); i++) {
        mTabs.addTab(mTabs.newTab().setText(titles.get(i)));
    }

    ArrayList<Fragment> datas = new ArrayList<>();
    datas.add(new HomeFragment());
    datas.add(new BraceletFragment());
    datas.add(new MineFragment());
    datas.add(new MineFragment2());


    FragmentAdapter fragmentAdapter = new FragmentAdapter(getSupportFragmentManager(), datas, titles);
    mContentVp.setAdapter(fragmentAdapter);
    mContentVp.setCurrentItem(0);
    //將TabLayout和ViewPager關聯(lián)起來逃沿。
    mTabs.setupWithViewPager(mContentVp);
    //給TabLayout設置適配器
    mTabs.setTabsFromPagerAdapter(fragmentAdapter);
}

class FragmentAdapter extends FragmentPagerAdapter {

    private final List<String> mTitles;
    private List<Fragment> info;

    public FragmentAdapter(FragmentManager fm, List<Fragment> info, List<String> titles) {
        super(fm);
        this.info = info;
        mTitles = titles;

    }


    @Override
    public Fragment getItem(int position) {
        return info.get(position);
    }

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

    @Override
    public int getItemPosition(Object object) {
        return POSITION_NONE;

    }

    @Override
    public CharSequence getPageTitle(int position) {
        if (null == mTitles)
            return null;
        else
            return mTitles.get(position);
    }

    @Override
        public void destroyItem(ViewGroup container, int position, Object object) {
            //如果注釋這行婴渡,那么不管怎么切換,page都不會被銷毀
            //super.destroyItem(container, position, object);
        }
}
}

布局文件

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">


<android.support.design.widget.TabLayout
    android:id="@+id/tabs"
    android:layout_width="match_parent"
    android:layout_height="45dp"
    android:paddingRight="15dp"
    android:paddingLeft="15dp"
    android:background="#ffffff"
    app:tabIndicatorColor="#FF972F"
    app:tabSelectedTextColor="#F6AE37"
    app:tabTextColor="#A3A3A3"
    app:tabIndicatorHeight="4dp"
    app:tabTextAppearance="@android:style/TextAppearance.Holo.Medium"/>

<android.support.v4.view.ViewPager
    android:id="@+id/content_vp"
    android:background="#f2f2f2"
    android:layout_width="match_parent"
    android:layout_height="match_parent"/>

</LinearLayout>

5. 附上頁面中的幾個Fragmen其中之一

package jibaowang.com.myapplicationdemo;

import android.os.Bundle;
import android.support.annotation.Nullable;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import org.xutils.view.annotation.ContentView;
import org.xutils.view.annotation.ViewInject;


public class HomeFragment extends Fragment {


    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.left_fragment, container,false);
        return view;
    }
}

原文鏈接:https://blog.csdn.net/qq_34581102/article/details/81100763

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末感挥,一起剝皮案震驚了整個濱河市缩搅,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌触幼,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,858評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件究飞,死亡現(xiàn)場離奇詭異置谦,居然都是意外死亡,警方通過查閱死者的電腦和手機亿傅,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,372評論 3 395
  • 文/潘曉璐 我一進店門媒峡,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人葵擎,你說我怎么就攤上這事谅阿。” “怎么了酬滤?”我有些...
    開封第一講書人閱讀 165,282評論 0 356
  • 文/不壞的土叔 我叫張陵签餐,是天一觀的道長。 經(jīng)常有香客問我盯串,道長氯檐,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,842評論 1 295
  • 正文 為了忘掉前任体捏,我火速辦了婚禮冠摄,結果婚禮上糯崎,老公的妹妹穿的比我還像新娘。我一直安慰自己河泳,他們只是感情好沃呢,可當我...
    茶點故事閱讀 67,857評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著拆挥,像睡著了一般薄霜。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上竿刁,一...
    開封第一講書人閱讀 51,679評論 1 305
  • 那天黄锤,我揣著相機與錄音,去河邊找鬼食拜。 笑死鸵熟,一個胖子當著我的面吹牛,可吹牛的內容都是我干的负甸。 我是一名探鬼主播流强,決...
    沈念sama閱讀 40,406評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼呻待!你這毒婦竟也來了打月?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,311評論 0 276
  • 序言:老撾萬榮一對情侶失蹤蚕捉,失蹤者是張志新(化名)和其女友劉穎奏篙,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體迫淹,經(jīng)...
    沈念sama閱讀 45,767評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡秘通,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,945評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了敛熬。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片肺稀。...
    茶點故事閱讀 40,090評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖应民,靈堂內的尸體忽然破棺而出话原,到底是詐尸還是另有隱情,我是刑警寧澤诲锹,帶...
    沈念sama閱讀 35,785評論 5 346
  • 正文 年R本政府宣布繁仁,位于F島的核電站,受9級特大地震影響辕狰,放射性物質發(fā)生泄漏改备。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,420評論 3 331
  • 文/蒙蒙 一蔓倍、第九天 我趴在偏房一處隱蔽的房頂上張望悬钳。 院中可真熱鬧盐捷,春花似錦、人聲如沸默勾。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,988評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽母剥。三九已至滞诺,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間环疼,已是汗流浹背习霹。 一陣腳步聲響...
    開封第一講書人閱讀 33,101評論 1 271
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留炫隶,地道東北人淋叶。 一個月前我還...
    沈念sama閱讀 48,298評論 3 372
  • 正文 我出身青樓,卻偏偏與公主長得像伪阶,于是被迫代替她去往敵國和親煞檩。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,033評論 2 355