Reputation: 295
i have my sidemenu and i also have some fragments and i replaced my fragments this is my source:
public class MainActivity extends FragmentActivity {
public static ScrollerLinearLayout sideSlideLayout;
public static ListView slidemenulistview;
private StradaSlideMenuAdapter slidemenuadapter;
public static int fragmentposition=0;
private String[] menu_namesGeo = {
"Home", "Door", "street"};
int[] menu_images = {
R.drawable.menunewsimg, R.drawable.menuchartimg, R.drawable.menunearimg
};
public static ImageView menuButton;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.activity_main);
sideSlideLayout = (ScrollerLinearLayout) findViewById(R.id.menu_content_side_slide_layout);
menuButton = (ImageView) findViewById(R.id.main_tmp_button);
slidemenulistview = (ListView) findViewById(R.id.slidemenulistview);
slidemenulistview.setEnabled(false);
menuButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
slidemenulistview.setEnabled(true);
sideSlideLayout.scroll();
}
});
slidemenuadapter = new StradaSlideMenuAdapter(MainActivity.this,
menu_namesGeo, menu_images);
slidemenulistview.setAdapter(slidemenuadapter);
slidemenulistview.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> arg0, View arg1,
int possition, long arg3) {
//btn_categorry.setEnabled(true);
navigateTo(possition);
sideSlideLayout.scroll();
}
});
navigateTo(0);
}
private void navigateTo(int position) {
switch (position) {
case 0:
getSupportFragmentManager()
.beginTransaction()
.replace(R.id.content_frame,
MainPageViewpager.newInstance(),
MainPageViewpager.TAG).commit();
fragmentposition=0;
break;
case 1:
getSupportFragmentManager()
.beginTransaction()
.replace(R.id.content_frame,
DealBoxNearFragment.newInstance(),
DealBoxNearFragment.TAG).commit();
fragmentposition=1;
break;
case 2:
getSupportFragmentManager()
.beginTransaction()
.replace(R.id.content_frame,
DealBoxAddBalanceFragment.newInstance(),
DealBoxAddBalanceFragment.TAG).commit();
fragmentposition=2;
break;
}
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event)
{
if(keyCode == KeyEvent.KEYCODE_BACK &&fragmentposition==0)
{
Toast.makeText(getApplicationContext(), "First fragment", Toast.LENGTH_SHORT).show();
return true;
}
else if(keyCode == KeyEvent.KEYCODE_BACK &&fragmentposition==1)
{
onBackPressed();
return true;
}
return false;
}
}
i wrote onKeyDownlistener
but my code does not working compete. I need to control fragment 's replace each times.how i can write code? if anyone knows solution please help me
thanks
Upvotes: 0
Views: 348
Reputation: 757
You have to override OnBackPressed Instead of OnKeyDown to intercept the Systems Default '
@Override
public void onBackPressed() {
if(I_WANT_TO_INTERCEPT){
//Control your fragment transaction here
}
else
{
super.onBackPressed();
}
}
` Beware if you don't call super method your application wont work properly.
Upvotes: 1
Reputation: 994
You need to add the fragments to the navigation back stack.
Android's documentation: http://developer.android.com/training/implementing-navigation/temporal.html#back-fragments
// Works with either the framework FragmentManager or the
// support package FragmentManager (getSupportFragmentManager).
getSupportFragmentManager().beginTransaction()
.add(detailFragment, "detail")
// Add this transaction to the back stack
.addToBackStack()
.commit();
Upvotes: 2