私はMainActivity
とHomeTabs
の3つのタブ(A B C)を持っています。リフレッシュをtab C
に設定しました。私はどのようにしてTabLayoutの断片を完成させることができますか?
私の構造は、私はタブCにonRefresh
をトリガするとき、私はMainActivity
に切り替えてHomeTabs
を表示するには、再度データをロードしますです。
私の問題は、finish();
をクリックすると、レイアウトはtab C
と表示されます。 getActivity().getSupportFragmentManager().beginTransaction().remove(this).commit();
または((MainActivity)getActivity()).removeFragment(getActivity());
それらの両方 iが戻ってクリックしたときに、私はまだ、すぐにアプリを終了することができない、何の作業ではない:
は、私のようなFragment
使用を終了してみてください。
私はそれを逃した何かを教えてくれる人もいます。
マイHomeTabs
がFragment
を拡張することがViewPager
を使用してTabLayout
3つのタブ
MainActivity追加:
public class MyLineChart extends Fragment implements SwipeRefreshLayout.OnRefreshListener{
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_my_line_chart, container, false);
//.....................
return view;
}
@Override
public void onRefresh() {
refreshLayout.setRefreshing(false);
// Both of them are no working.
//((MainActivity)getActivity()).removeFragment(getActivity());
//getActivity().getSupportFragmentManager().beginTransaction().remove(this).commit();
Intent intent = new Intent(getActivity(),MainActivity.class);
intent.putExtra("refresh", true);
startActivity(intent);
}
最後に私のHomeTabs:ここ
public class MainActivity extends AppCompatActivity {
private FrameLayout frameLayout;
private Toolbar toolBar;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
frameLayout = (FrameLayout) findViewById(R.id.frameLayout);
// Load the main Fragment
if (savedInstanceState == null) {
switchFragment(HomeTabs.newInstance());
}
//take the onRefresh data,send data to HomeTabs and open tab C
if (getIntent().hasExtra("refresh")) {
boolean isRefresh = getIntent().getExtras().getBoolean("refresh");
if (isRefresh) {
Bundle bundle = new Bundle();
bundle.putBoolean("refresh", isRefresh);
HomeTabs homeTabs = new HomeTabs();
homeTabs.setArguments(bundle);
switchFragment(homeTabs);
}
}
}
public void switchFragment(Fragment fragment) {
FragmentManager manager = getSupportFragmentManager();
FragmentTransaction transaction = manager.beginTransaction();
transaction.replace(R.id.frameLayout, fragment);
transaction.addToBackStack(null);
transaction.commit();
}
// I try to finsh my tab C , it's no working
public void removeFragment(Activity activity) {
activity.onBackPressed();
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
new DialogHandler(this).quickDialog(
getResources().getString(R.string.quick),
getResources().getString(R.string.confirm),
getResources().getString(R.string.cancel),
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// If i onRefrsh three times , i will finsh three times... here is my issue.
finish();
}
}, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
}
});
}
return super.onKeyDown(keyCode, event);
}
}
を私のタブCフラグメントは、リフレッシュメソッドをコールバックであります断片化した日付とショーのタブC:
Bundle bundle = getArguments();
if (bundle != null) {
boolean isRefresh = bundle.getBoolean("refresh");
if (isRefresh) {
//tab C position is 2
tabLayout.getTabAt(2).select();
}
}
ご返信ありがとうございますが、私の 'startActivity(intent);'の前にあなたのコードを試してみると、私のリフレッシュについては何の働きもありません。 –
アクティビティではなくTAb Cをもう一度置き換えてください。再起動して更新してください。 –
最新の回答をお試しください。 –