Commit fa3b60dd by 罗翻

fragment切换优化

parent 99077b03
Showing with 152 additions and 100 deletions
......@@ -90,7 +90,7 @@ dependencies {
//mutidex
compile 'com.android.support:multidex:1.0.2'
compile 'com.android.support:design:25.0.0'
compile 'com.android.support:design:25.4.0'
//greendao数据库
compile 'org.greenrobot:greendao:3.2.0'
......
......@@ -78,7 +78,7 @@ public class InitializeActivity extends AppCompatActivity {
}
public void showPerMissionDialog() {
CustomDialog dialog = new CustomDialog(mActivity, R.style.custom_dialog2, getString(R.string.please_open__permission)
CustomDialog dialog = new CustomDialog(mActivity, R.style.CustomDialog, getString(R.string.please_open__permission)
, (dialog1, confirm) -> {
if (confirm) {
Intent intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
......
......@@ -145,7 +145,7 @@ public abstract class BasePresenter<V> {
* 重新登录的提示框.
*/
private void showLoginDialog() {
mDialog = new CustomDialog(mActivity, R.style.custom_dialog2, getString(R.string.login_state_no)
mDialog = new CustomDialog(mActivity, R.style.CustomDialog, getString(R.string.login_state_no)
, (dialog, confirm) -> {
if (confirm) {
UserManager.getInstance().clearUserInfo(mActivity);
......
......@@ -40,6 +40,13 @@ public class HomeOrderPresenter extends HomeOrderContract.Presenter {
public void accept(Tab tab) throws Exception {
((HomeOrderFragment) mView).setTabNum(tab, mIndex);
}
}, responeThrowable -> {
Tab tab = new Tab();
tab.setCanceled(0);
tab.setError(0);
tab.setPendingservice(0);
tab.setReservation(0);
((HomeOrderFragment) mView).setTabNum(tab, mIndex);
}));
}
......
......@@ -18,7 +18,6 @@ import com.dayu.bigfish.greendao.GreenDaoManager;
import com.dayu.bigfish.greendao.OrderInfoDao;
import com.dayu.bigfish.ui.SopWebViewActivity;
import com.dayu.bigfish.utils.managers.UserManager;
import com.luck.picture.lib.tools.PictureFileUtils;
import org.greenrobot.eventbus.EventBus;
import org.greenrobot.greendao.query.Query;
......@@ -154,7 +153,7 @@ public class ProcessOrderPresenter extends ProcessOrderContract.Presenter {
}
EventBus.getDefault().post(new OrderState(status, mPosition));
mOrderInfoDao.deleteByKey((long) orderId);
PictureFileUtils.deleteCacheDirFile(mActivity);
// PictureFileUtils.deleteCacheDirFile(mActivity);
mActivity.finish();
}
}));
......@@ -184,7 +183,7 @@ public class ProcessOrderPresenter extends ProcessOrderContract.Presenter {
mAccountId, isPay, info.getDoorPrice(), info.getOtherInfo(),
info.getServerPrice(), info.getMaterialCost(), info.getOtherPrice());
mImages.clear();
PictureFileUtils.deleteCacheDirFile(mActivity);
// PictureFileUtils.deleteCacheDirFile(mActivity);
}
}));
}
......
......@@ -62,50 +62,44 @@ public class MainActivity extends BaseActivity<MainPresenter, ActivityMainBindin
mFragments = new Fragment[]{firstFragment, secondFragment, thirdFragment, fourFragment};
mTabs = new TextView[]{mBind.tabFirst, mBind.tabSecond, mBind.tabThird, mBind.tabFour};
addFragment();
showHideFragment(1, mPosition);
initListener();
doAction(getIntent());
EventBus.getDefault().register(this);
}
private void initListener() {
mBind.tabFirst.setOnClickListener(o -> {
showHideFragment(0, mPosition);
});
mBind.tabSecond.setOnClickListener(o -> {
showHideFragment(1, mPosition);
});
mBind.tabFirst.setOnClickListener(o -> showHideFragment(0, mPosition));
mBind.tabSecond.setOnClickListener(o -> showHideFragment(1, mPosition));
mBind.tabThird.setOnClickListener(o -> {
showHideFragment(2, mPosition);
mBind.ivMessage.setVisibility(View.GONE);
});
mBind.tabFour.setOnClickListener(o -> {
showHideFragment(3, mPosition);
});
}
public void resetSelected(int position) {
for (int i = 0; i < mTabs.length; i++) {
mTabs[i].setSelected(false);
}
mTabs[position].setSelected(true);
mBind.tabFour.setOnClickListener(o -> showHideFragment(3, mPosition));
}
/**
* 添加fragment.
*/
private void addFragment() {
mFragmentManger = getSupportFragmentManager();
FragmentTransaction transaction = mFragmentManger.beginTransaction()
.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
for (int i = 0; i < mFragments.length; i++) {
Fragment fragment = mFragments[i];
String toName = fragment.getClass().getName();
transaction.add(R.id.fl_container, fragment, toName);
if (i != 0) {
transaction.hide(fragment);
}
transaction.add(R.id.fl_container, fragment);
transaction.hide(fragment);
}
transaction.show(mFragments[1]);
transaction.commit();
resetSelected(1);
}
/**
* fragment切换.
*
* @param showPosition
* @param hidePosition
*/
private void showHideFragment(int showPosition, int hidePosition) {
if (showPosition == hidePosition) return;
mFragmentManger.beginTransaction()
......@@ -116,6 +110,18 @@ public class MainActivity extends BaseActivity<MainPresenter, ActivityMainBindin
mPosition = showPosition;
}
/**
* 重置按钮状态.
* @param position
*/
public void resetSelected(int position) {
for (int i = 0; i < mTabs.length; i++) {
mTabs[i].setSelected(false);
}
mTabs[position].setSelected(true);
mPosition =position;
}
/**
* 消息小红点.
......@@ -138,7 +144,7 @@ public class MainActivity extends BaseActivity<MainPresenter, ActivityMainBindin
* @param upgradePrompt 提示语
*/
public void showUpdateDialog(String upgradePrompt, CustomDialog.OnCloseListener listener) {
CustomDialog dialog = new CustomDialog(mActivity, R.style.custom_dialog2, upgradePrompt, listener);
CustomDialog dialog = new CustomDialog(mActivity, R.style.CustomDialog, upgradePrompt, listener);
dialog.setTitle(getString(R.string.have_new_version))
.setNegativeButton(getString(R.string.next_again))
.setPositiveButton(getString(R.string.need_upglude));
......@@ -158,6 +164,10 @@ public class MainActivity extends BaseActivity<MainPresenter, ActivityMainBindin
notificationManager.notify(0, builder.build());
}
/**
* 处理intent传来的信息.
* @param intent
*/
private void doAction(Intent intent) {
InformBean info = (InformBean) intent.getSerializableExtra(Constants.MESSAGE_INFO);
if (info != null) {
......
package com.dayu.bigfish.ui;
import android.os.Bundle;
import android.support.design.widget.TabLayout;
import android.support.v4.app.Fragment;
import com.dayu.bigfish.Constants;
import com.dayu.bigfish.R;
import com.dayu.bigfish.base.BaseActivity;
import com.dayu.bigfish.bean.OrderDetail;
import com.dayu.bigfish.databinding.ActivityOrderDetailsBinding;
import com.dayu.bigfish.presenter.orderdetail.OrderDetailContract;
import com.dayu.bigfish.presenter.orderdetail.OrderDetailPresenter;
import com.dayu.bigfish.ui.adapter.FragmentAdapter;
import com.dayu.bigfish.ui.fragment.OrderDatailsServeFragment;
import com.dayu.bigfish.ui.fragment.OrderDateilsFragment;
import com.dayu.bigfish.ui.adapter.FragmentBaseAdapter;
import com.dayu.bigfish.ui.fragment.OrderDetaillsFragment;
import com.dayu.bigfish.ui.fragment.OrderDetailsServeFragment;
import com.dayu.bigfish.utils.TabLayoutUtils;
import java.util.ArrayList;
......@@ -26,10 +24,9 @@ import java.util.List;
public class OrderDetailsActivity extends BaseActivity<OrderDetailPresenter, ActivityOrderDetailsBinding>
implements OrderDetailContract.View {
private List<Fragment> list;
private FragmentAdapter fragmentAdapter;
private OrderDateilsFragment orderDatailsFragment;
private OrderDatailsServeFragment orderDatailsServeFragment;
private FragmentBaseAdapter fragmentAdapter;
private OrderDetaillsFragment orderDatailsFragment;
private OrderDetailsServeFragment orderDatailsServeFragment;
@Override
......@@ -43,21 +40,17 @@ public class OrderDetailsActivity extends BaseActivity<OrderDetailPresenter, Act
}
public void init(OrderDetail detail) {
Bundle bundle = new Bundle();
bundle.putSerializable(Constants.ORDER_DETAIL, detail);
list = new ArrayList<>();
orderDatailsFragment = new OrderDateilsFragment();
list.add(orderDatailsFragment);
orderDatailsServeFragment = new OrderDatailsServeFragment();
list.add(orderDatailsServeFragment);
orderDatailsFragment.setArguments(bundle);
orderDatailsServeFragment.setArguments(bundle);
fragmentAdapter = new FragmentAdapter(getSupportFragmentManager(), list);
List<Fragment> fragments = new ArrayList<>();
List<String> titles = new ArrayList<>();
orderDatailsFragment = OrderDetaillsFragment.newInstance(detail);
orderDatailsServeFragment = OrderDetailsServeFragment.newInstance(detail);
fragments.add(orderDatailsFragment);
fragments.add(orderDatailsServeFragment);
titles.add(getString(R.string.order_detail));
titles.add(getString(R.string.server_record));
fragmentAdapter = FragmentBaseAdapter.newInstance(getSupportFragmentManager(), fragments, titles);
mBind.viewPager.setAdapter(fragmentAdapter);
mBind.tablayout.setupWithViewPager(mBind.viewPager);
mBind.tablayout.removeAllTabs();
mBind.tablayout.addTab(mBind.tablayout.newTab().setText(getString(R.string.order_detail)));
mBind.tablayout.addTab(mBind.tablayout.newTab().setText(getString(R.string.server_record)));
mBind.tablayout.setTabMode(TabLayout.MODE_FIXED);
TabLayoutUtils.setIndicator(mBind.tablayout, 60, 60, R.color.cl_receiving_order_item_data, this);
}
......
......@@ -26,7 +26,7 @@ public class SettingActivity extends BaseActivity<SettingPresenter, ActivitySett
@Override
public void showCachDialog(CustomDialog.OnCloseListener listener) {
CustomDialog dialog = new CustomDialog(mActivity, R.style.custom_dialog2, getString(R.string.sure_clear_data)
CustomDialog dialog = new CustomDialog(mActivity, R.style.CustomDialog, getString(R.string.sure_clear_data)
, listener);
dialog.setTitle(getString(R.string.notice))
.setNegativeButton(getString(R.string.cancle))
......
......@@ -19,6 +19,7 @@ public class FragmentAdapter extends FragmentStatePagerAdapter {
this.list_fragemnts = list_fragemnts;
}
@Override
public int getCount() {
return list_fragemnts.size();
......@@ -30,7 +31,13 @@ public class FragmentAdapter extends FragmentStatePagerAdapter {
return list_fragemnts.get(position);
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
}
@Override
public CharSequence getPageTitle(int position) {
return super.getPageTitle(position);
}
}
......@@ -7,7 +7,7 @@ import android.support.v4.app.FragmentStatePagerAdapter;
import java.util.List;
/**
* Created by luofan on 17/12/24.
* Created by baixiaokang on 16/5/8.
*/
public class FragmentBaseAdapter extends FragmentStatePagerAdapter {
private List<Fragment> mFragments;
......
......@@ -23,7 +23,6 @@ public class HomeFirstTabFragment extends BaseFragment<HomeFirstPresenter, Fragm
@Override
public void initView() {
}
@Override
......
......@@ -30,17 +30,26 @@ public class HomeMessageTabFragment extends DataBindingFragment<FragmentMessageB
}
@Override
public int getLayoutId() {
return R.layout.fragment_message;
}
@Override
public void initView() {
List<String> mTitle = new ArrayList<>();
List<Integer> category = new ArrayList<>();
mTitle.add(mActivity.getString(R.string.message_system));
mTitle.add(mActivity.getString(R.string.message_dayu));
category.add(1);
category.add(2);
Observable.fromIterable(category).map((Function<Integer, Fragment>) MessageFragment::newInstance).toList()
.map(fragments -> FragmentBaseAdapter.newInstance(getActivity().getSupportFragmentManager(), fragments, mTitle))
.subscribe(fragmentBaseAdapter -> mBind.vpMessage.setAdapter(fragmentBaseAdapter));
mBind.tbMessage.setupWithViewPager(mBind.vpMessage);
List<Integer> args = new ArrayList<>();
List<String> titles = new ArrayList<>();
titles.add(getString(R.string.message_system));
titles.add(getString(R.string.message_dayu));
args.add(1);
args.add(2);
Observable.fromIterable(args).map((Function<Integer, Fragment>) MessageFragment::newInstance).toList()
.map(fragments -> FragmentBaseAdapter.newInstance(getChildFragmentManager(), fragments, titles))
.subscribe(fragmentBaseAdapter -> {
mBind.vpMessage.setAdapter(fragmentBaseAdapter);
mBind.vpMessage.setOffscreenPageLimit(2);
mBind.tbMessage.setupWithViewPager(mBind.vpMessage);
});
TabLayoutUtils.setIndicator(mBind.tbMessage, 60, 60, R.color.cl_receiving_order_item_data, getActivity());
if (mIndex != -1) {
mBind.vpMessage.setCurrentItem(mIndex);
......@@ -48,11 +57,6 @@ public class HomeMessageTabFragment extends DataBindingFragment<FragmentMessageB
}
}
@Override
public int getLayoutId() {
return R.layout.fragment_message;
}
public void swtichFragment(int position) {
if (mBind.tbMessage == null || mBind.tbMessage.getTabAt(position) == null) {
return;
......
......@@ -144,7 +144,6 @@ public class HomeOrderFragment extends BaseFragment<HomeOrderPresenter, Fragment
}
});
setTabNum(null,0);
}
......@@ -152,16 +151,16 @@ public class HomeOrderFragment extends BaseFragment<HomeOrderPresenter, Fragment
* 将网络请求到的数据展示到tab上
*/
public void setTabNum(Tab tab, int myTabIndex) {
String[] tabNum = new String[]{tab.getReservation() + "", tab.getPendingservice() + "",
tab.getError() + "", tab.getCanceled() + ""};
if (isFirstAddTab) {
mBind.tbHome.removeAllTabs();
mBind.tbHome.addTab(mBind.tbHome.newTab().setCustomView(CreatTab("0", tabDesc[0])));
mBind.tbHome.addTab(mBind.tbHome.newTab().setCustomView(CreatTab("0", tabDesc[1])));
mBind.tbHome.addTab(mBind.tbHome.newTab().setCustomView(CreatTab("0", tabDesc[2])));
mBind.tbHome.addTab(mBind.tbHome.newTab().setCustomView(CreatTab("0", tabDesc[3])));
mBind.tbHome.addTab(mBind.tbHome.newTab().setCustomView(CreatTab(tabNum[0], tabDesc[0])));
mBind.tbHome.addTab(mBind.tbHome.newTab().setCustomView(CreatTab(tabNum[1], tabDesc[1])));
mBind.tbHome.addTab(mBind.tbHome.newTab().setCustomView(CreatTab(tabNum[2], tabDesc[2])));
mBind.tbHome.addTab(mBind.tbHome.newTab().setCustomView(CreatTab(tabNum[3], tabDesc[3])));
isFirstAddTab = false;
} else {
String[] tabNum = new String[]{tab.getReservation() + "", tab.getPendingservice() + "",
tab.getError() + "", tab.getCanceled() + ""};
for (int i = 0; i < mBind.tbHome.getTabCount(); i++) {
TextView tv = (TextView) mBind.tbHome.getTabAt(i).getCustomView().findViewById(R.id.tabtext);
TextView tvIcon = (TextView) mBind.tbHome.getTabAt(i).getCustomView().findViewById(R.id.tabicon);
......
......@@ -149,7 +149,7 @@ public class HomePersonFragment extends BaseFragment<HomePersonPresenter, Fragme
}
private void showAlertDialog() {
CustomDialog dialog = new CustomDialog(mActivity, R.style.custom_dialog2, mActivity.getString(R.string.not_set_account)
CustomDialog dialog = new CustomDialog(mActivity, R.style.CustomDialog, mActivity.getString(R.string.not_set_account)
, (dialog1, confirm) -> {
if (confirm) {
Intent intent = new Intent(mActivity, WithdrawalsActivity.class);
......
package com.dayu.bigfish.ui.fragment;
import android.os.Bundle;
import android.support.v7.widget.LinearLayoutManager;
import android.view.View;
......@@ -17,12 +18,20 @@ import com.dayu.bigfish.utils.UIUtils;
* on 2017/9/13.
*/
public class OrderDateilsFragment extends DataBindingFragment<FragmentOrderDatailsBinding> {
public class OrderDetaillsFragment extends DataBindingFragment<FragmentOrderDatailsBinding> {
private boolean mFlag = true;
private CoreAdapter mAdapter;
private OrderDetail mDetail;
public static OrderDetaillsFragment newInstance(OrderDetail detail) {
Bundle args = new Bundle();
args.putSerializable(Constants.ORDER_DETAIL,detail);
OrderDetaillsFragment fragment = new OrderDetaillsFragment();
fragment.setArguments(args);
return fragment;
}
@Override
public void initView() {
mDetail = (OrderDetail) getArguments().getSerializable(Constants.ORDER_DETAIL);
......
package com.dayu.bigfish.ui.fragment;
import android.os.Bundle;
import com.dayu.bigfish.Constants;
import com.dayu.bigfish.R;
import com.dayu.bigfish.base.DataBindingFragment;
......@@ -14,7 +16,15 @@ import java.text.ParseException;
* on 2017/9/13.
*/
public class OrderDatailsServeFragment extends DataBindingFragment<FragmentOrderServeBinding> {
public class OrderDetailsServeFragment extends DataBindingFragment<FragmentOrderServeBinding> {
public static OrderDetailsServeFragment newInstance(OrderDetail detail) {
Bundle args = new Bundle();
args.putSerializable(Constants.ORDER_DETAIL, detail);
OrderDetailsServeFragment fragment = new OrderDetailsServeFragment();
fragment.setArguments(args);
return fragment;
}
@Override
public int getLayoutId() {
......
......@@ -76,6 +76,9 @@ public class BindingUtils {
*/
@BindingAdapter({"setPresenter"})
public static void setPresenter(LRecyclerView view, BaseListPresenter presenter) {
if (presenter == null) {
return;
}
view.setPresenter(presenter);
presenter.getSourceDatas().addOnPropertyChangedCallback(new Observable.OnPropertyChangedCallback() {
@Override
......
......@@ -9,12 +9,12 @@
<RelativeLayout
style="@style/title">
style="@style/title">
<TextView
android:id="@+id/text_title"
style="@style/text_title"
android:text="@string/tv_message" />
<TextView
android:id="@+id/text_title"
style="@style/text_title"
android:text="@string/tv_message" />
</RelativeLayout>
......@@ -40,18 +40,17 @@
android:background="@color/cl_white"
app:tabIndicatorColor="@color/cl_receiving_order_item_data"
app:tabMaxWidth="0dp"
app:tabMode="fixed"
app:tabSelectedTextColor="@color/cl_receiving_order_item_data"
app:tabTextAppearance="@style/TabLayoutTextStyle"
app:tabTextColor="@color/cl_tab_line"
/>
app:tabTextColor="@color/cl_tab_line" />
<ImageView style="@style/card_line" />
<ImageView style="@style/line" />
<android.support.v4.view.ViewPager
android:id="@+id/vp_message"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/cl_home_listview_bg" />
<android.support.v4.view.ViewPager
android:id="@+id/vp_message"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginTop="@dimen/dp_10"
android:background="@color/cl_white" />
</LinearLayout>
</layout>
\ No newline at end of file
......@@ -3,8 +3,6 @@
<data>
<import type="com.dayu.bigfish.presenter.homefourtab.HomePersonPresenter" />
<variable
name="presenter"
type="com.dayu.bigfish.presenter.homefourtab.HomePersonPresenter" />
......
......@@ -90,11 +90,6 @@
<item name="android:textSize">@dimen/sp_13.3</item>
</style>
<style name="CustomDialog" parent="Theme.AppCompat.Dialog">
<item name="android:backgroundDimEnabled">false</item>
<item name="android:windowBackground">@android:color/transparent</item>
</style>
<style name="Dialog" parent="@android:style/Theme.Holo.Dialog">
<item name="android:windowSoftInputMode">stateHidden|adjustResize</item>
<!-- 边框 -->
......@@ -110,4 +105,23 @@
<!-- 模糊 -->
<item name="android:backgroundDimEnabled">false</item>
</style>
<style name="CustomDialog" parent="@android:style/Theme.Dialog">
<item name="android:windowSoftInputMode">stateHidden|adjustResize</item>
<item name="android:windowFrame">@null</item>
<!-- Dialog的windowFrame框为无 -->
<item name="android:windowIsFloating">true</item>
<!-- 是否漂现在activity上 -->
<item name="android:windowIsTranslucent">true</item>
<!-- 是否半透明 -->
<item name="android:windowNoTitle">true</item>
<item name="android:background">@null</item>
<item name="android:windowBackground">@android:color/transparent</item>
<item name="android:windowContentOverlay">@null</item>
<!-- 去除黑色边框的关键设置项 -->
<item name="android:backgroundDimEnabled">true</item>
<!-- 屏幕背景是否变暗 -->
<item name="android:backgroundDimAmount">0.3</item>
</style>
</resources>
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment