2013-03-08 2 views
1

나는 프래그먼트를 사용하며, 앱을 종료하고 다른 작업을 수행하기 위해 백 버튼을 감지하고 싶습니다. 하지만 ... 시도한 모든 코드가 작동하지 않습니다. 중단 점을 사용하여 디버그 모드에서 테스트했지만 기능이 중단 점으로 표시되어 있지만 다시 버튼을 누르면 호출되지 않습니다. 앱이 종료되었습니다. .가상 뒤로 버튼 사용을 감지하는 방법은 무엇입니까?

 public class MyListFragment extends Fragment implements OnTouchListener, OnFocusChangeListener, OnClickListener, OnKeyListener{ 

// Test 1 
     public boolean onKeyDown(int keyCode, KeyEvent event) { 
        String a=null; 
        switch(keyCode) 
        { 
        case KeyEvent.KEYCODE_CAMERA: 
        Toast.makeText(getActivity(),"Pressed Camera Button",        Toast.LENGTH_SHORT).show(); 
         return true; 
        case KeyEvent.KEYCODE_1: 
        Toast.makeText(getActivity(), "Pressed 1", Toast.LENGTH_SHORT).show(); 
         return true; 
        case KeyEvent.KEYCODE_HOME: 
        Toast.makeText(getActivity(), "Pressed Home Button", Toast.LENGTH_SHORT).show(); 
         return true; 
        case KeyEvent.KEYCODE_BACK: 
        Toast.makeText(getActivity(), "Pressed Back Button", Toast.LENGTH_SHORT).show(); 
         return true; 
        } 
        if (keyCode == KeyEvent.KEYCODE_BACK) 
        { 
        a=a; 
        } 
        return false; 
       } 
// Test 2 
    @Override 
    public boolean onKey(View v, int keyCode, KeyEvent event) { 
     // TODO Auto-generated method stub 
     String b=null; 
     b=b; 

     return false; 
    } 
// Test 3  
    public void onBackPressed() { 
     String b=null; 
     b=b;  
    } 
// Test 4  
    public boolean onKeyUp(int keyCode, KeyEvent event) { 
     String b=null; 
     b=b; 
     return false; 
    } 
    } 

나는 왜 일하지 않는 아이디어가 있습니까?

+0

내가 무시 일식 @ 추가하면 (onBackPressed 공공 무효) {} – DjHacktorReborn

+0

에 @Override를 추가했다 : "MyListFragment의 onBackPressed() 메소드를 오버라이드하거나 구현해야합니다 ..... – morbak

+0

해결책을 게시했습니다. 문제가 해결되면 – DjHacktorReborn

답변

0

이 방법을 사용하면 Activity의 해답을 얻을 수 있습니다. 더 자세한 제어를 필요로하는 경우 일부 조각을 볼 때

FragmentTransaction tx = fragmentManager.beginTransation(); 
tx.replace(R.id.fragment, new MyFragment()).addToBackStack("tag").commit(); 

(즉, 당신이를 억제 할 :

@Override 
public void onBackPressed() { 
    // TODO Auto-generated method stub 
    super.onBackPressed(); 
} 
+0

을 추가하십시오. @ Override eclipse를 추가하면"MyListFragment의 onBackPressed() 메소드가 재정의되어야합니다 또는 슈퍼 타입 메소드를 구현 ..... ..... – morbak

+0

오, 죄송합니다. 언급하지 않으 셨다면,이 코드를 부모 작업에'FragmentActivity'가 있어야합니다. 거기에 배치하여 무언가를하기 위해 조각을 호출하는 '청취자'를 만들 수 있습니다. –

0

당신이 조각 사이에 전환 할 때, 당신하여 FragmentTransaction의 일환으로 addToBackStack()를 호출 당신이 당신의 조각의 상위 뷰 상에 OnKeyListener을 설정할 수 있습니다) 다시 키

fragment.getView().setOnKeyListener(new OnKeyListener() 
{ 
    @Override 
    public boolean onKey(View v, int keyCode, KeyEvent event) 
    { 
     if(keyCode == KeyEvent.KEYCODE_BACK) 
     { 
      return true; 
     } 
     return false; 
    } 
}); 
관련 문제