如何从其他Activity类访问Activity的视图

时间:2011-10-18 06:45:59

标签: android

我的问题是当我在Main类中更改TextView的文本时,它会返回nullPointerException。

这是我的代码:

main.xml中

<TabHost ...>
  <RelativeLayout ...>
    <LinearLayout ...>
      <TabWidget .../>
       <FrameLayout ...>
        <ListView ../>
       </FrameLayout>
    </LinearLayout>

    <LinearLayout ...>
      <TextView android:id="@+id/status" ... />

    </LinearLayout>

  </RelativeLayout>
</TabHost>

主要课程

....
TabHost tabHost;
TabHost.TabSpec spec;
Intent intent;

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

    //display implementation of TabHost
    ....
    //Contacts tab
    intent = new Intent().setClass(this, Contacts.class);
    spec = tabHost.newTabSpec("contacts").setIndicator("Contacts",   res.getDrawable(R.drawable.ic_tab_contacts)).setContent(intent);
    tabHost.addTab(spec);

}

然后将更新 状态TextView 的类是:

联系人课程

public class Contacts extends ListActivity{
    public void onCreate(Bundle savedInstanceState){
       super.onCreate(savedInstanceState);

       //gather info to display in ListView
       ....

       updateStatus("New Status");
    }

    private void updateStatus(String status){
       TextView labelView = (TextView) findViewById(R.id.status);
       labelView.setText(status);
    }

}


labelView.setText(status); Error occurs here....

请帮助我。我无法在网上找到任何解决方案。 我需要更新状态....

继承我的清单:

...
 <application ...>
   <activity android:name=".Main" ... >
     <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
      </intent-filter>
   </activity>

   <activity android:name=".Contacts"  android:label="@string/app_name"></activity> 
    <activity android:name=".OtherClass"  android:label="@string/app_name"></activity> 
    <activity android:name=".OtherClass2"  android:label="@string/app_name"></activity>
 </application>
...

提前,谢谢你的帮助。

2 个答案:

答案 0 :(得分:4)

当您尝试从“联系人”活动上下文中查找时,您会看到主活动上下文中存在ID为status的视图。这就是它返回null的原因。

试试这个,它应该可以解决你的问题:

主要活动

public class Main extends Activity {

    public static String sStatus = "";

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

            //display implementation of TabHost
            ....

    }

    @Override
    protected void onResume() {
        TextView labelView = (TextView) findViewById(R.id.status);
        labelView.setText(status);
    }
}

通讯录活动

public class Contacts extends ListActivity{
    public void onCreate(Bundle savedInstanceState){
       super.onCreate(savedInstanceState);

       //gather info to display in ListView
       ....

       updateStatus("New Status");
    }

    private void updateStatus(String status){
        Main.sStatus = status;
    }

}

答案 1 :(得分:0)

视图仅与Main相关联。 您必须重置“联系人”中的contentView。 修改后的代码

public class Contacts extends ListActivity{
    public void onCreate(Bundle savedInstanceState){
       super.onCreate(savedInstanceState);
       setContentView(R.layout.main);

       //gather info to display in ListView
       ....

       updateStatus("New Status");
    }

    private void updateStatus(String status){
       TextView labelView = (TextView) findViewById(R.id.status);
       labelView.setText(status);
    }

}