I'm new android programmer, and I don't know how to set new text of TextView after call by OnTabChangeListener. I've tried a lot of ways but each time was displayed weird error.
Edit: (Lastest code)
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");
}
}
Error:
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)
as Luksprog says you can not use direct intialization of activity like you did in java. As far I can see you want to show a textview in a child activity of your tab host. To do so you can use the following
Other child = (Other) getTabHost().getChildAt(0).getContext();
child.refreshInfo();
N.B.
As you are new android programmer it is highly recommended to start with Fragments. Tab concept is depcrecated long time ago. Old programmers may still work on it to support their existing programs but as a new programmer you better avoid it.
UPDATE:
You can do another thing
getTabHost().setCurrentTab(tabindex);
Other child= (Other) this.getCurrentActivity();
child.refreshInfo();