어쨌든 꽤 초보자 질문 일 수도 있습니다. Tabhost는 감가 상각 되었기 때문에 작업 표시 줄 탭으로 전환하려고 시도했지만 조각을 사용하여 문제가 발생했습니다. 작업 표시 줄 탭 내에서 활동을 사용할 수 있습니까?작업 표시 줄 단편을 사용하지 않고 탭을 사용 하시겠습니까?
어떤 도움을 주셔서 감사합니다.
감사합니다.
어쨌든 꽤 초보자 질문 일 수도 있습니다. Tabhost는 감가 상각 되었기 때문에 작업 표시 줄 탭으로 전환하려고 시도했지만 조각을 사용하여 문제가 발생했습니다. 작업 표시 줄 탭 내에서 활동을 사용할 수 있습니까?작업 표시 줄 단편을 사용하지 않고 탭을 사용 하시겠습니까?
어떤 도움을 주셔서 감사합니다.
감사합니다.
당신이 조각을 통해 활동을 사용하여 설정하는 경우 당신은 그냥 Fragments over Activities
작업 표시 줄 탭을 눌러 활동을 시작하는 것은 말도 안됩니다. 그렇게하면 탭과 작업 표시 줄 자체가 제거되어 다른 활동의 내용으로 바뀝니다. – CommonsWare
그건 하위 클래스들이 들어 왔기 때문에, 그 아이디어는 전혀 터무니 없습니다. – slinden77
실제로 이것이 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
사용에 대한 또한이 댓글을 확인해야합니다 귀하의
ActionBar.TabListener
startActivity(new Intent(thisActivity(), thatActivity.class));
에서 활동을 시작하는 의도를 사용할 수 있습니다 작업 표시 줄 탭 내에서 활동을 사용할 수 있습니까?
다행히도, 아니오.
그렇다고해서 조각을 사용해야한다는 것은 아닙니다. TabListener
은 UI 변경에 영향을 미치려고 할 수 있습니다. 무차별 한 해결책은 setContentView()
으로 다시 전화하여 모든 기존 위젯을 덤프하고 새로운 (아마도 다른 설정) 세트를 놓는 것입니다.
답변 해 주셔서 감사합니다. MrEngineer가 제안한 해결책으로 시도해 보았지만 당신이 말한대로 일어났습니다. 물론 뷰를 변경하면 내 두 창이 표시되지만 많은 제어가 사라집니다. 이제는 가치가 떨어지는 TabHost의 모양과 느낌을 제공하는 것으로 추측합니다. 조각을 사용해야합니다. – Maddin
이 대답은 잘못되었습니다. 실제로 가능합니다. – slinden77
나는이 솔루션을 시도했지만 가능하지만 해킹입니다. 질문은, 이것이 탭뷰를 만드는 최적의 방법이 아니라면, 성능이 내 애플 리케이션에 얼마나 나쁜 영향을 끼치는가? 나는 조각을 적절하게 사용하고 그것을 사용하여 내 애플 리케이션을 재 작성하는 방법을 배우는 것이 가치가있는 해결책을 안다고 생각합니까? – Kalaji
을 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
이것은 작업 표시 줄 탭의 활동이 아닙니다. 이것들은 화면을 넘기는 액션 바 탭 *에 의해 시작된 활동입니다. 이것은 OP 질문에 전혀 관련이 없습니다. – CommonsWare
동일한 효과가 있습니다. 한 단어에 대해 약혼하지 마십시오. – slinden77
을 확장하는 Activity
의 onCreate()
방법을 수정, 당신은 조각 대신 활동을 교체하는 작업 표시 줄을 사용하고 싶습니다. 이 경우 계속해서 읽으십시오.
공식 문서에서 볼 수있는 동작 표시 줄 기능은 ui, position 집합을 정의합니다. 활동이있는 작업 표시 줄을 구현하려는 경우 수행해야 할 가장 중요한 작업은 입니다. 1. 탭 (작업 위치)을 활동과 연관시킵니다. 2. 추가 tablistener 콜백 활동의 각이 클래스를 사용할 수 있도록, 최적의 설계가 tablistener는 별도의 클래스를 구현하는 것입니다
을 클릭 (새 활동을 인스턴스화 현재 활동을 중지) 탭이 때마다 .
정말 단편을 사용해야합니다. 파편을 사용하여 당신의 문제는 무엇입니까? – nhaarman
Tabhost를 사용하여 내 앱을 이미 개발 했으므로 조각을 사용하여 탭을 "변환"하는 문제에 직면합니다. 내 다른 주요 문제는 :) 기본적으로 Expandable List 및 단편을 사용하는 방법에 대한 간단한 예제가 없다는 것입니다. – Maddin
ExpandableList 및 조각에 대한 질문을 올리십시오 ... 도움이 될 것입니다. :) – Barak