191 lines
6.7 KiB
Java
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;
|
|
}
|
|
}
|