Files
assistant-android/app/src/main/java/com/gh/gamecenter/ask/AskQuestionsNewFragment.java
2017-12-28 17:21:32 +08:00

191 lines
6.7 KiB
Java

package com.gh.gamecenter.ask;
import android.app.Activity;
import android.arch.lifecycle.Observer;
import android.arch.lifecycle.ViewModelProviders;
import android.content.Intent;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.design.widget.TabLayout;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.TextView;
import com.facebook.drawee.view.SimpleDraweeView;
import com.gh.base.adapter.FragmentAdapter;
import com.gh.base.fragment.BaseFragment;
import com.gh.common.util.ImageUtils;
import com.gh.common.view.TabIndicatorView;
import com.gh.gamecenter.NormalActivity;
import com.gh.gamecenter.R;
import com.gh.gamecenter.ask.entity.AskTagGroupsEntity;
import com.gh.gamecenter.ask.viewmodel.AskQuestionsNewViewModel;
import com.lightgame.view.NoScrollableViewPager;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import butterknife.BindView;
import butterknife.OnClick;
import static com.gh.gamecenter.ask.AskFragment.COMMUNITIES_SELECT_REQUEST;
/**
* Created by khy on 5/12/17.
*/
// todo IllegalStateException: Can't change tag of fragment
public class AskQuestionsNewFragment extends BaseFragment {
@BindView(R.id.ask_questions_tablayout)
TabLayout mTablayout;
@BindView(R.id.ask_questions_viewpager)
NoScrollableViewPager mViewpager;
@BindView(R.id.ask_questions_tabindicator)
TabIndicatorView mTabIndicatorView;
@BindView(R.id.ask_appbar)
View mAppBar;
@BindView(R.id.reuse_no_connection)
View mNoConn;
@BindView(R.id.list_loading)
View mLoading;
public static final String ASK_QUESTIONS_TYPE = "ask_questions_type";
private AskQuestionsNewViewModel mModel;
private List<AskTagGroupsEntity> mTagGroupsList;
private HashMap<String, Fragment> mCacheFragmentsMap = new HashMap<>();
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == COMMUNITIES_SELECT_REQUEST && resultCode == Activity.RESULT_OK) {
mTagGroupsList.clear();
mCacheFragmentsMap.clear();
mNoConn.setVisibility(View.GONE);
mLoading.setVisibility(View.VISIBLE);
mModel.repty();
}
}
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
final AskQuestionsNewViewModel.Factory factory = new AskQuestionsNewViewModel.Factory(getActivity().getApplication());
mModel = ViewModelProviders.of(this, factory)
.get(AskQuestionsNewViewModel.class);
subscribeUi(mModel);
}
private void subscribeUi(AskQuestionsNewViewModel viewModel) {
viewModel.getTagGroupsObserable().observe(this, new Observer<List<AskTagGroupsEntity>>() {
@Override
public void onChanged(@Nullable List<AskTagGroupsEntity> tagGroups) {
mTagGroupsList = tagGroups;
if (tagGroups != null && tagGroups.size() > 0) {
initFragments();
initTab();
mAppBar.setVisibility(View.VISIBLE);
mNoConn.setVisibility(View.GONE);
mLoading.setVisibility(View.GONE);
} else {
mAppBar.setVisibility(View.GONE);
mNoConn.setVisibility(View.VISIBLE);
mLoading.setVisibility(View.GONE);
}
}
});
}
@Override
protected int getLayoutId() {
return R.layout.fragment_ask_questions;
}
@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
}
@OnClick({R.id.reuse_no_connection})
public void onClick(View view) {
switch (view.getId()) {
case R.id.reuse_no_connection:
mNoConn.setVisibility(View.GONE);
mLoading.setVisibility(View.VISIBLE);
mModel.repty();
break;
}
}
private void initFragments() {
if (mCacheFragmentsMap.size() != mTagGroupsList.size()) {
mCacheFragmentsMap.clear();
} else {
return;
}
for (AskTagGroupsEntity tag : mTagGroupsList) {
AskQuestionsNewBodyFragment questionsBodyFragment = new AskQuestionsNewBodyFragment();
Bundle args = new Bundle();
args.putString(ASK_QUESTIONS_TYPE, tag.getName());
questionsBodyFragment.setArguments(args); // todo 选择社区后 回调-无法更新数据 有可能复用缓存
mCacheFragmentsMap.put(tag.getName(), questionsBodyFragment);
}
}
private void initTab() {
FragmentAdapter adapter = new FragmentAdapter(getChildFragmentManager(), getFragments());
mViewpager.setAdapter(adapter);
mTablayout.setupWithViewPager(mViewpager);
mTabIndicatorView.setupWithTabLayout(mTablayout);
mTabIndicatorView.setupWithViewPager(mViewpager);
mTablayout.addTab(mTablayout.newTab()); // 调整顺序 item
for (int i = 0; i < mTablayout.getTabCount(); i++) {
TabLayout.Tab tab = mTablayout.getTabAt(i);
if (tab != null) {
View tabView;
if (mTagGroupsList.size() > i) {
tabView = getTabView(mTagGroupsList.get(i));
} else {
AskTagGroupsEntity tagList = new AskTagGroupsEntity();
tagList.setName(getString(R.string.ask_tab_order_title));
tagList.setIcon("res:///" + R.drawable.ask_tag_order);
tabView = getTabView(tagList);
tabView.setOnClickListener((view) -> {
NormalActivity.startFragment(getContext(), AskTabOrderFragment.class);
});
}
tab.setCustomView(tabView);
}
}
}
public View getTabView(AskTagGroupsEntity tagList) {
View view = LayoutInflater.from(getContext()).inflate(R.layout.ask_tab_item, null);
SimpleDraweeView tabIcon = view.findViewById(R.id.tab_item_icon);
ImageUtils.Companion.display(tabIcon, tagList.getIcon());
TextView tabType = view.findViewById(R.id.tab_item_type);
tabType.setText(tagList.getName());
return view;
}
private List<Fragment> getFragments() {
List<Fragment> fragments = new ArrayList<>();
for (AskTagGroupsEntity tag : mTagGroupsList) {
fragments.add(mCacheFragmentsMap.get(tag.getName()));
}
return fragments;
}
}