TabActivity和嵌入式活性之间的通信 [英] Communication between TabActivity and the embedded activity
问题描述
我试图找出最佳的通信实践TabActivity并嵌入该TabActivity子活动之间。
在我的TabActivity,有一个按钮。当单击该按钮时,我想镶嵌在这TabActivity子活动进行更新。我写的code像下面了,只是不知道它是否是一个很好的做法。谢谢你。
MyTabActivity.java
公共类MyTabActivity扩展TabActivity实现OnClickListener {
私人TabHost m_tabHost;
公共无效的onCreate(包savedInstanceState){
super.onCreate(savedInstanceState);
的setContentView(R.layout.ff_tab_activity);
LayoutInflater充气=(LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
m_tabHost = getTabHost();
TabHost.TabSpec规范;
意向意图;
意图=新的意图()setClass(这一点,ChildActivity.class)。
规格= m_tabHost.newTabSpec(标签1);
spec.setContent(意向);
TabView的=(的TextView)inflater.inflate(R.layout.tab_indicator,NULL);
spec.setIndicator(TabView的);
m_tabHost.addTab(规范);
m_tabHost.setCurrentTab(0);
ImageView的nextButtonIv =(ImageView的)findViewById(R.id.next_button);
nextButtonIv.setOnClickListener(本);
}
@覆盖
公共无效的onClick(视图v){
开关(v.getId()){
案例R.id.next_button:
同步(ChildActivity.class){
如果(NULL!= ChildActivity.s_childActivity){
ChildActivity.s_childActivity.changeUI();
}
}
打破;
}
}
ChildActivity.java
公共类ChildActivity延伸活动{
公共静态ChildActivity s_childActivity;
@覆盖
公共无效的onCreate(包savedInstanceState){
super.onCreate(savedInstanceState);
同步(MatchupsActivity.class){
s_childActivity =这一点;
}
的setContentView(R.layout.child_activity);
}
公共无效changeUi(){
code,改变UI
}
保护无效的onDestroy(){
super.onDestroy();
同步(MatchupsActivity.class){
s_childActivity = NULL;
}
}
似乎罚款。有两点要注意:
- 我看不出有任何理由进行同步
。
- 我会更换
ChildActivity.s_childActivity.changeUI();
与
如果(ChildActivity.s_childActivity!= NULL){
ChildActivity.s_childActivity.changeUI();
}
甚至
尝试{
ChildActivity.s_childActivity.changeUI();
}赶上(例外五){
//日志
}
为增加偏执的安全。 :)
I am trying to figure out the best practice of communication between a TabActivity and the child activity embedded in this TabActivity.
In my TabActivity, there is a button. When the button is clicked, I want the child activity embedded in this TabActivity to be updated. I wrote the code like below, and just wonder whether it is a good practice. Thanks.
MyTabActivity.java
public class MyTabActivity extends TabActivity implements OnClickListener {
private TabHost m_tabHost;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.ff_tab_activity);
LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
m_tabHost = getTabHost();
TabHost.TabSpec spec;
Intent intent;
intent = new Intent().setClass(this, ChildActivity.class);
spec = m_tabHost.newTabSpec("Tab 1");
spec.setContent(intent);
tabView = (TextView) inflater.inflate(R.layout.tab_indicator, null);
spec.setIndicator(tabView);
m_tabHost.addTab(spec);
m_tabHost.setCurrentTab(0);
ImageView nextButtonIv = (ImageView) findViewById(R.id.next_button);
nextButtonIv.setOnClickListener(this);
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.next_button:
synchronized (ChildActivity.class) {
if (null != ChildActivity.s_childActivity) {
ChildActivity.s_childActivity.changeUI();
}
}
break;
}
}
ChildActivity.java
public class ChildActivity extends Activity {
public static ChildActivity s_childActivity;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
synchronized (MatchupsActivity.class) {
s_childActivity = this;
}
setContentView(R.layout.child_activity);
}
public void changeUi() {
code that changes UI
}
protected void onDestroy() {
super.onDestroy();
synchronized (MatchupsActivity.class) {
s_childActivity = null;
}
}
Seems fine. A couple of notes:
- I see no reason for synchronization.
- I'd replace
ChildActivity.s_childActivity.changeUI();
with
if(ChildActivity.s_childActivity != null){
ChildActivity.s_childActivity.changeUI();
}
or even
try{
ChildActivity.s_childActivity.changeUI();
} catch(Exception e){
//log
}
for added paranoid safety. :)
这篇关于TabActivity和嵌入式活性之间的通信的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!