0

추가 기능을 탐색하기 위해 TabHost 및 일부 탭을 추가하여 응용 프로그램을 확장하려고합니다. 현재 응용 프로그램은 기본적으로 데이터베이스를 검색합니다. 현재 응용 프로그램 워크 플로우 : 탭을 사용하여 활동 오류를 시작할 수 없습니다.

  • 사용자의 로그인 화면에

    1. 앱로드
    2. 사용자 로그, 검색 폼 및 입력 데이터를 가져
    3. 검색 결과 목록 활동을로드 "검색"누른다. ..

    새 탭에는 검색을위한 별도의 탭이 있습니다. 모든 활동이 그 탭 그룹 안에 남아 있기를 바랍니다. 그래서 나는이 모든 것을 처리하기 위해 활동 그룹을 만들었습니다

    내 검색 활동의 검색 버튼의 OnClickListener를에서
    public class searchGroup extends ActivityGroup {   
        public static searchGroup group; 
        private ArrayList<View> history; 
    
        @Override 
        protected void onCreate(Bundle savedInstanceState) { 
          super.onCreate(savedInstanceState); 
          this.history = new ArrayList<View>(); 
          group = this;  
          View view = getLocalActivityManager().startActivity("search", new Intent(this,search.class).addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)).getDecorView(); 
          replaceView(view); 
         } 
    
        public void replaceView(View v) {    
         history.add(v);     
         setContentView(v); 
        } 
    
        public void back() { 
         if(history.size() > 0) { 
          history.remove(history.size()-1); 
          setContentView(history.get(history.size()-1)); 
         }else { 
          finish(); 
         } 
        } 
    
        @Override 
        public void onBackPressed() { 
         searchGroup.group.back(); 
         return; 
        } 
    } 
    

    :

    : 나는 충돌 어디서

    view = searchGroup.group.getLocalActivityManager().startActivity("search_results",new Intent(search.this, search_results.class).addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)).getDecorView(); 
    searchGroup.group.replaceView(view); 
    

    이것은 02-11 13 : 43 : 49.481 : E/AndroidRuntime (1165) : java.lang.RuntimeException : 작업을 시작할 수 없습니다. ComponentInfo {com.myApp/com.myApp.search_results} : android.view.WindowManager $ BadToke nException : 창을 추가 할 수 없습니다. - 토큰 [email protected]이 입니다. 당신의 활동은 실행 중입니까? 나는 SEARCH_RESULT 활동의에서 onCreate에서 라인의 주석을 해제하면

    그러나 :

    new LoadSearches().execute(); 
    

    없는 충돌,하지만 난 분명히 아무 것도 얻을 수 없습니다. LoadSearches()는 서버로 이동하여 검색 문자열을 실행 한 다음 반환 된 데이터를 onPostExecute()의 ListActivity에 채우는 작업을 수행하는 AsyncTask입니다.

    나는 활동이 전환 될 때 왜 여기가 부서 지거나 정상적으로 움직이지 않는지 이해하지 못합니다. 이 문제를 어떻게 해결해야합니까? 더 좋은 방법이 있습니까? 프래그먼트에 대해 조금 읽었지만 아직 그걸로 아무 것도하지 않았습니다.

  • +0

    나는이 오류가 발생하여 어떤 해결책을 얻었습니까? –

    답변

    1

    나는 많은 양의 머리카락을 꺼내서 파편과 함께 가기로 결정했다. 일부 자원은 내가 파편 탭을 사용하는 기존 응용 프로그램을 변환하는 데 유용하다고 : 나는 또한 나의 활동 사이에 데이터를 전달에 문제가 있었다

    Fragments in Android 2.2.1, 2.3, 2.0. Is this possible?

    http://thepseudocoder.wordpress.com/2011/10/04/android-tabs-the-fragment-way/

    . 인 텐트/번들을 사용하여 액티비티간에 데이터를 전달하는 방법은 실제로는 동일하게 작동하지 않지만 약간 수정할 수 있으며 여전히 작동합니다.

    오래된 방법 (activity2에에 activity1에 데이터를 전달) :

    :

    activity1에

    Intent myIntent = new Intent(search.this, search_results.class); 
    Bundle b = new Bundle(); 
    b.putString("SEARCHSTRING", strSearch); 
    myIntent.putExtras(b); 
    startActivityForResult(myIntent, 0); 
    

    activity2에

    Bundle b = getIntent().getExtras(); 
    strSearch = b.getString("SEARCHSTRING"); 
    

    사용하여 조각 나는 activity2에 대한 초기화를 만들어야했습니다

    public search_results newInstance(String strSearch){ 
        search_results f = new search_results(); 
        Bundle b = new Bundle(); 
        b.putString("SEARCHSTRING", strSearch); 
        f.setArguments(b);   
        return f;  
    } 
    
    내가이 모든 정보를 찾기위한

    Avtivity1

    Fragment newFragment = new search_results().newInstance(strSearch); 
    FragmentTransaction ft = getFragmentManager().beginTransaction(); 
    ft.replace(R.id.realtabcontent, newFragment); 
    ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN); 
    ft.addToBackStack(null); 
    ft.commit(); 
    

    activity2에 (onCreateView) 나는 희망

    Bundle b = getArguments(); 
    strSearch = b.getString("SEARCHSTRING"); 
    

    가 어려웠다으로이 사람을 도움이를 사용하여 10

    , 새로운 방법은 조각을 사용하여 한 자리에.