chromelend
chromelend

Reputation: 295

android control back button click in fragment

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

Answers (2)

Vigneshwaran Murugesan
Vigneshwaran Murugesan

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

jonas
jonas

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

Related Questions