2010-09-08 3 views
13

Điều này có vẻ như nó phải đơn giản, nhưng tôi không thể tìm ra cách để làm điều đó. Tôi cần một tab để có văn bản bắt đầu, nhưng sau đó có thay đổi văn bản đó sau khi người dùng chọn một mục từ danh sách. Tôi biết cách thay đổi hình nền và màu sắc của tab thông quaLàm cách nào để thay đổi văn bản tab android khi đang di chuyển?

mTabHost.getChildAt(index).setBackgroundColor(); 

nhưng không có tùy chọn thay đổi chỉ báo của tab. Tôi đã thử sử dụng EditText.

private EditText tabName; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.statistics); 

    comm = new Communicator(); 

    tabName = new EditText(this); 
    tabName.setText("BeginningText"); 

    mTabHost = getTabHost(); 
    mTabHost.addTab(mTabHost 
        .newTabSpec("tab_1_stat") 
        .setIndicator(User) 
        .setContent(R.id.meStatsTab)); 
    mTabHost.addTab(mTabHost 
        .newTabSpec("tab_2_stat") 
        .setIndicator(tabName.getText()) 
        .setContent(R.id.themStatsTab)); 
    mTabHost.addTab(mTabHost 
        .newTabSpec("tab_3_stat") 
        .setIndicator("Archive") 
        .setContent(R.id.archiveStatsTab)); 
    mTabHost.setOnTabChangedListener(this); 
    getTabWidget().getChildAt(1).setOnClickListener(new onThemTabClicked()); 
    mTabHost.setCurrentTab(0); 

    onTabChanged("tab_1_stat"); 

}

.....

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent intent) { 
    super.onActivityResult(requestCode, resultCode, intent); 

    tabName.setText("ChangedTabText"); 
    Bundle extras = intent.getExtras(); 
    themStats = extras.getStringArray("themStats"); 
    mTabHost.setCurrentTab(1); 
    onTabChanged("tab_2_stat"); 
} 

đó không làm việc, hoặc, cùng với một vài lần khác. Ý tưởng nào? Cảm ơn trước!

Trả lời

7

Wow. Đây là một nỗi đau. Rõ ràng TabWidget làm điều gì đó sôi nổi với RelativeLayout và mỗi khi tôi cố gắng làm bất cứ điều gì với giải pháp của radek-k, nó đã bị thổi bay với lỗi RelativeLayout. Vì vậy, về cơ bản công việc xung quanh là như sau. Nó cũng cho phép bạn thay đổi font chữ, cỡ chữ, font color vv

TabWidget vTabs = getTabWidget(); 
RelativeLayout rLayout = (RelativeLayout) vTabs.getChildAt(tabIndex); 
((TextView) rLayout.getChildAt(textIndex)).setText("NewTabText"); 

hoặc trong một dòng ...

((TextView)((RelativeLayout)getTabWidget().getChildAt(tabIndex)).getChildAt(textIndex)).setText("NewTabText"); 

nơi "textIndex" là chỉ số của lĩnh vực văn bản. Trong trường hợp này, nó là 1. Nếu tab có biểu tượng hoặc sửa đổi tùy chỉnh, chỉ mục có thể thay đổi.

Cảm ơn một lần nữa để radek-k. Bạn chắc chắn đã cho tôi chỉ đúng hướng.

+0

Nếu bạn đang sử dụng tiêu chuẩn 'TabActivity', bạn có thể sử dụng' findViewById (android.R.id.title) 'thay cho' getChildAt (textIndex) 'như trong [câu trả lời này] (http://stackoverflow.com/a/5577979/165674). –

2
TabWidget vTabs = .....; 

// get desired tab view 
View vTab = vTabs.getChildAt(i); 

// I guess vTab is instance of TextView 
TextView vText = (TextView) vTab; 

vText.setText(...); 
+0

Tôi đã có thể chơi với điều đó một chút đêm qua, nhưng nó vẫn còn thổi phồng lên tôi. Bạn đã làm việc đó chưa? Hôm nay tôi sẽ thử nghiệm nó nhiều hơn một chút, nhưng nếu bạn có một chút thông tin chi tiết hơn sẽ tuyệt vời hơn. Cảm ơn một lần nữa. – Honeal

5

Bạn có thể làm điều đó mà không biết chỉ số kỳ diệu của TextView bằng cách sử dụng findViewById:

TabWidget vTabs = getTabWidget(); 
View indicatorView = vTabs.getChildAt(tabIndex); 
((TextView) indicatorView.findViewById(android.R.id.title)).setText("NewTabText"); 
0

Bạn có thể làm điều đó như thế này

TabHost tabHost = getTabHost(); 
TextView tv = (TextView) tabHost.getTabWidget().getChildAt(0).findViewById(android.R.id.title); 
tv.setText("New Tab Text"); 

đâu android.R.id.title được hệ thống tạo ra, chỉ cần thay đổi ChildIndexVăn bản theo nhu cầu của bạn

2

hãy thử cách này dễ dàng nhất phù hợp với tôi:

tabLayout.getTabAt(index).setText("TabName");