8

어쨌든 꽤 초보자 질문 일 수도 있습니다. Tabhost는 감가 상각 되었기 때문에 작업 표시 줄 탭으로 전환하려고 시도했지만 조각을 사용하여 문제가 발생했습니다. 작업 표시 줄 탭 내에서 활동을 사용할 수 있습니까?작업 표시 줄 단편을 사용하지 않고 탭을 사용 하시겠습니까?

어떤 도움을 주셔서 감사합니다.

감사합니다.

+0

정말 단편을 사용해야합니다. 파편을 사용하여 당신의 문제는 무엇입니까? – nhaarman

+0

Tabhost를 사용하여 내 앱을 이미 개발 했으므로 조각을 사용하여 탭을 "변환"하는 문제에 직면합니다. 내 다른 주요 문제는 :) 기본적으로 Expandable List 및 단편을 사용하는 방법에 대한 간단한 예제가 없다는 것입니다. – Maddin

+1

ExpandableList 및 조각에 대한 질문을 올리십시오 ... 도움이 될 것입니다. :) – Barak

답변

3

당신이 조각을 통해 활동을 사용하여 설정하는 경우 당신은 그냥 Fragments over Activities

+4

작업 표시 줄 탭을 눌러 활동을 시작하는 것은 말도 안됩니다. 그렇게하면 탭과 작업 표시 줄 자체가 제거되어 다른 활동의 내용으로 바뀝니다. – CommonsWare

+0

그건 하위 클래스들이 들어 왔기 때문에, 그 아이디어는 전혀 터무니 없습니다. – slinden77

+0

실제로 이것이 Google I/O 2014가 구현 된 방법입니다 (https : // github.co.kr/google/iosched/blob/master/android/src/main/java/co.kr/google/samples/apps/iosched/ui/BaseActivity.java # L802). 탐색 서랍의 항목을 클릭하면 새로운 활동이 시작되고 탐색 서가 다시 생성됩니다. 'BaseActivity'라는 클래스는 모든 클래스에 대한 탐색 서랍을 구현하는 데 사용됩니다. – Benjamin

2

사용에 대한 또한이 댓글을 확인해야합니다 귀하의 ActionBar.TabListener

startActivity(new Intent(thisActivity(), thatActivity.class)); 

에서 활동을 시작하는 의도를 사용할 수 있습니다 작업 표시 줄 탭 내에서 활동을 사용할 수 있습니까?

다행히도, 아니오.

그렇다고해서 조각을 사용해야한다는 것은 아닙니다. TabListener은 UI 변경에 영향을 미치려고 할 수 있습니다. 무차별 한 해결책은 setContentView()으로 다시 전화하여 모든 기존 위젯을 덤프하고 새로운 (아마도 다른 설정) 세트를 놓는 것입니다.

+0

답변 해 주셔서 감사합니다. MrEngineer가 제안한 해결책으로 시도해 보았지만 당신이 말한대로 일어났습니다. 물론 뷰를 변경하면 내 두 창이 표시되지만 많은 제어가 사라집니다. 이제는 가치가 떨어지는 TabHost의 모양과 느낌을 제공하는 것으로 추측합니다. 조각을 사용해야합니다. – Maddin

+0

이 대답은 잘못되었습니다. 실제로 가능합니다. – slinden77

+0

나는이 솔루션을 시도했지만 가능하지만 해킹입니다. 질문은, 이것이 탭뷰를 만드는 최적의 방법이 아니라면, 성능이 내 애플 리케이션에 얼마나 나쁜 영향을 끼치는가? 나는 조각을 적절하게 사용하고 그것을 사용하여 내 애플 리케이션을 재 작성하는 방법을 배우는 것이 가치가있는 해결책을 안다고 생각합니까? – Kalaji

0

ActionBar과 함께 사용할 수 있습니다. 그러나 이것은 의도 된 동작이 아니므로 완벽하게 작동하지는 않습니다.

import android.annotation.SuppressLint; 
import android.app.ActionBar; 
import android.app.ActionBar.Tab; 
import android.app.Activity; 
import android.content.Intent; 
import android.os.Bundle; 
import android.util.Log; 
import android.view.Menu; 
import android.view.MenuInflater; 
import android.view.MenuItem; 

//@SuppressLint("NewApi") 
public class ActionBarActivity extends Activity { 

    private String TAG = getClass().getName(); 
    private Intent i = null; 
    private ActionBar actionBar; 
    private Tab one; 
    private Tab two; 
    private Tab three; 

    // create a tab listener that is called when the user changes tabs 
    ActionBar.TabListener tabListener = new ActionBar.TabListener() { 
     @Override 
     public void onTabSelected(Tab tab, android.app.FragmentTransaction ft) { 
      if (tab.getTag().equals("one")){ 
       Log.d(TAG, "tab one selected"); 
       i = new Intent(getApplicationContext(), One.class); 
       determineRun(); 
      } 
      if (tab.getTag().equals("two")){ 
       Log.d(TAG, "tab two selected"); 
       i = new Intent(getApplicationContext(), Two.class); 
       determineRun(); 
      } 
      if (tab.getTag().equals("three")){ 
       Log.d(TAG, "tab three selected"); 
       i = new Intent(getApplicationContext(), Three.class); 
       determineRun(); 
      }   
     } 

     @Override 
     public void onTabUnselected(Tab tab, android.app.FragmentTransaction ft) { 
      // TODO Auto-generated method stub   
     } 

     @Override 
     public void onTabReselected(Tab tab, android.app.FragmentTransaction ft) { 
      // TODO Auto-generated method stub  
     } 
    }; 

    // we only need to start the Activity if it's not actually already the current Activity! 
    void determineRun(){ 
     if (!TAG.equals(i.getComponent().getClassName())){ 
      startActivity(i); 
     } 
     return; 
    }//end method 

    @Override 
    public void onCreate(Bundle savedInstanceState){ 
     super.onCreate(savedInstanceState); 

     actionBar = getActionBar(); 
     actionBar.setDisplayShowTitleEnabled(true); 
     actionBar.setSubtitle(getResources().getString("subtitle"));   
     actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);  
     one = actionBar.newTab(); 
     one.setText("Tab 1").setTag("one"); 
     two = actionBar.newTab(); 
     two.setText("Tab 2").setTag("two"); 
     three = actionBar.newTab(); 
     three.setText("Tab 3").setTag("three");     
     one.setTabListener(tabListener); 
     two.setTabListener(tabListener); 
     three.setTabListener(tabListener); 

     // You will have to set the selected Tab manually 
     // A good idea would be to create a subclass for each Tab based on this code 
     // Then, just create a new Activity which extends ActionBarActivity 
     actionBar.addTab(one, 0, false); 
     actionBar.addTab(two, 1, true); // selected Tab 
     actionBar.addTab(three, 2, false); 
    }//end method 

    @Override 
    public void onResume(){ 
     super.onResume(); 

     Log.d(TAG, "onResume()"); 
     Log.d(TAG, ""+i.getComponent().getClassName()); 
     // again, here you need to select the Tab manually 
     if (!TAG.equals(i.getComponent().getClassName())){ 
      actionBar.selectTab(two); // selected Tab 
     } 
    }//end method 

    @Override 
    public void onPause(){ 
     super.onPause(); 

     Log.d(TAG, "onPause()"); 
    }//end method 

    @Override 
    public void onBackPressed() { 
     super.onBackPressed(); 

     overridePendingTransition(android.R.anim.slide_in_left, android.R.anim.slide_out_right); 
    }//end method  
}//end class 

당신은 아마 그래서 탭의 변화가 seemless 당신의 Activity에 애니메이션을 재정의합니다. 이 이렇게하려면 내 이해가 정확한지 ActionBarActivity

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    overridePendingTransition(0, 0); 
}//end method 
+0

이것은 작업 표시 줄 탭의 활동이 아닙니다. 이것들은 화면을 넘기는 액션 바 탭 *에 의해 시작된 활동입니다. 이것은 OP 질문에 전혀 관련이 없습니다. – CommonsWare

+0

동일한 효과가 있습니다. 한 단어에 대해 약혼하지 마십시오. – slinden77

0

을 확장하는 ActivityonCreate() 방법을 수정, 당신은 조각 대신 활동을 교체하는 작업 표시 줄을 사용하고 싶습니다. 이 경우 계속해서 읽으십시오.

공식 문서에서 볼 수있는 동작 표시 줄 기능은 ui, position 집합을 정의합니다. 활동이있는 작업 표시 줄을 구현하려는 경우 수행해야 할 가장 중요한 작업은 입니다. 1. 탭 (작업 위치)을 활동과 연관시킵니다. 2. 추가 tablistener 콜백 활동의 각이 클래스를 사용할 수 있도록, 최적의 설계가 tablistener는 별도의 클래스를 구현하는 것입니다

을 클릭 (새 활동을 인스턴스화 현재 활동을 중지) 탭이 때마다 .

관련 문제