2013-05-03 3 views
1

Я новый программист для Android, и я не знаю, как установить новый текст TextView после вызова OnTabChangeListener. Я пробовал много способов, но каждый раз отображалась странная ошибка.Как изменить textview на tabhost listener

Редактировать: (код Lastest)

MainActivity.java:

package com.RobsoN; 

import android.app.Activity; 
import android.app.TabActivity; 
import android.content.Intent; 
import android.graphics.Color; 
import android.os.Bundle; 
import android.util.Log; 
import android.widget.TabHost; 
import android.widget.TextView; 
import android.widget.TabHost.OnTabChangeListener; 
import android.widget.TabHost.TabSpec; 

public class MainActivity extends TabActivity { 

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

    final TabHost tabHost = getTabHost(); 

    Log.i("App","App initialization"); 

    TabSpec start = tabHost.newTabSpec("Start"); 
    start.setIndicator("Start", getResources().getDrawable(android.R.drawable.ic_menu_rotate)); 
    Intent photosIntent = new Intent(this, Start.class); 
    start.setContent(photosIntent); 

    TabSpec settings = tabHost.newTabSpec("Ustawienia"); 
    settings.setIndicator("Ustawienia", getResources().getDrawable(android.R.drawable.ic_menu_manage)); 
    Intent songsIntent = new Intent(this, Settings.class); 
    settings.setContent(songsIntent); 

    TabSpec info = tabHost.newTabSpec("Informacje"); 
    info.setIndicator("Informacje", getResources().getDrawable(android.R.drawable.ic_menu_help)); 
    Intent videosIntent = new Intent(this, Other.class); 
    info.setContent(videosIntent); 

    // Adding all TabSpec to TabHost 
    tabHost.addTab(start); 
    tabHost.addTab(settings); 
    tabHost.addTab(info); 

    tabHost.setOnTabChangedListener(new OnTabChangeListener(){ 

     public void onTabChanged(String tabId) { 
      if(tabId.equals("Informacje")) 
      { 
       Other child = (Other) getTabHost().getChildAt(0).getContext(); //Error here: 1 java.lang.ClassCastException: com.RobsoN.MainActivity 2 com.RobsoN.MainActivity$1.onTabChanged(MainActivity.java:50) 

       child.refreshInfo();  
      }  
     }}); 

} 

}

Other.java:

package com.RobsoN; 

import android.app.Activity; 
import android.os.Bundle; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.Button; 
import android.widget.TextView; 

public class Other extends Activity { 

Button button_update; 
TextView stat_lastestappversion; 

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.tab_other); 

    stat_lastestappversion = (TextView) findViewById(R.id.stat_lastestappversion); 
    button_update = (Button) findViewById(R.id.button_update); 
    button_update.setOnClickListener(new OnClickListener() 
    { 
     public void onClick(View v) 
     { 

     } 
    }); 
} 

public void refreshInfo() 
{ 
    stat_lastestappversion = (TextView) findViewById(R.id.stat_lastestappversion); 
    stat_lastestappversion.setText("TEST TEST 321"); 
} 
} 

Ошибка:

05-05 13:00:59.845: E/AndroidRuntime(314): FATAL EXCEPTION: main 
05-05 13:00:59.845: E/AndroidRuntime(314): java.lang.ClassCastException: com.RobsoN.MainActivity 
05-05 13:00:59.845: E/AndroidRuntime(314): at com.RobsoN.MainActivity$1.onTabChanged(MainActivity.java:50) 
05-05 13:00:59.845: E/AndroidRuntime(314): at android.widget.TabHost.invokeOnTabChangeListener(TabHost.java:356) 
05-05 13:00:59.845: E/AndroidRuntime(314): at android.widget.TabHost.setCurrentTab(TabHost.java:341) 
05-05 13:00:59.845: E/AndroidRuntime(314): at android.widget.TabHost$2.onTabSelectionChanged(TabHost.java:129) 
05-05 13:00:59.845: E/AndroidRuntime(314): at android.widget.TabWidget$TabClickListener.onClick(TabWidget.java:453) 
05-05 13:00:59.845: E/AndroidRuntime(314): at android.view.View.performClick(View.java:2408) 
05-05 13:00:59.845: E/AndroidRuntime(314): at android.view.View$PerformClick.run(View.java:8816) 
05-05 13:00:59.845: E/AndroidRuntime(314): at android.os.Handler.handleCallback(Handler.java:587) 
05-05 13:00:59.845: E/AndroidRuntime(314): at android.os.Handler.dispatchMessage(Handler.java:92) 
05-05 13:00:59.845: E/AndroidRuntime(314): at android.os.Looper.loop(Looper.java:123) 
05-05 13:00:59.845: E/AndroidRuntime(314): at android.app.ActivityThread.main(ActivityThread.java:4627) 
05-05 13:00:59.845: E/AndroidRuntime(314): at java.lang.reflect.Method.invokeNative(Native Method) 
05-05 13:00:59.845: E/AndroidRuntime(314): at java.lang.reflect.Method.invoke(Method.java:521) 
05-05 13:00:59.845: E/AndroidRuntime(314): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868) 
05-05 13:00:59.845: E/AndroidRuntime(314): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626) 
05-05 13:00:59.845: E/AndroidRuntime(314): at dalvik.system.NativeStart.main(Native Method) 
+0

Вы не можете просто создать экземпляр Activity. Используйте рамки фрагментов, чтобы иметь вкладки. – Luksprog

ответ

0

как Luksprog говорит, что вы не можете использовать прямую инциализацию активности, как в java. Насколько я могу видеть, вы хотите показать текстовое представление в дочерней активности вашего узла вкладки. Для этого вы можете использовать следующие

Other child = (Other) getTabHost().getChildAt(0).getContext(); 
    child.refreshInfo(); 

нотабене

Поскольку вы новый программист для Android, настоятельно рекомендуется начинать с Fragments. Концепция Tab давно устарела. Старые программисты могут по-прежнему работать над этим, чтобы поддерживать свои существующие программы, но как нового программиста вам лучше избежать этого.

UPDATE:

Вы можете сделать еще одно

getTabHost().setCurrentTab(tabindex); 
Other child= (Other) this.getCurrentActivity(); 
child.refreshInfo(); 
+1

Благодарим вас за полный и понятный ответ. Я молодой программист, я не знаю английского достаточно хорошо, чтобы понять руководство для Android без каких-либо проблем, но я все равно буду стараться. – user2321517

+0

приветствуется :) – stinepike

+0

К сожалению, я не проверял код перед публикацией, я пытался решить его самостоятельно разными способами, но всегда получаю ошибку: 'java.lang.ClassCastException: com.RobsoN.MainActivity \t at com.RobsoN.MainActivity $ 1.onTabChanged (MainActivity.java:70) \t в android.widget.TabHost.invokeOnTabChangeListener (TabHost.java:356) \t в android.widget.TabHost.setCurrentTab (TabHost.java:341) ' – user2321517

Смежные вопросы