TabActivity内のアクティビティのビューにアクセスするにはどうすればよいですか?

私は TabActivity というフォームを分割するための他のアクティビティを含んでいます。 TabActivity には、 TabActivity に含まれるすべてのアクティビティにわたるすべてのフォーム関連ビューからデータを収集して保存するためのボタンがレイアウト内にあります。私が実行している問題は、 TabActivity はこれらのビューにアクセスできないように見えることです。 findViewById()のいずれかを NullPointerException として取得します。

ドキュメンテーションは、 TabActivity がそれに含まれるアクティビティの制御に関してどのように機能するかについてまったく疎そうです。それを別のものに切り替えるときにアクティビティが破壊された場合、私が入っている状況は理にかなっています。私は上記の目標を達成するための最良のアプローチを知りたいと思います。

src/com/vendor/MyTabActivity.java:

public class MyTabActivity extends TabActivity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.my_tab_activity);
        final Button saveButton = (Button) findViewById(R.id.save_button);
        saveButton.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
               //NullPointerException happens here
                String fieldValue = ((TextView) findViewById(R.id.text_field)).getText().toString();
            }
        });
    }
}

res/layout/my_tab_activity.xml:

<?xml version="1.0" encoding="utf-8"?>

    
        
        
        <button android:id="@+id/save_button"/>
    

src/com/vendor/NestedActivity.java:

public class NestedActivity extends Activity {  
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.nested_activity);
    }
}

res/layout/nested_activity.xml:

<?xml version="1.0" encoding="utf-8"?>
  
    
        
    

1

2 答え

あなたの問題は、 MyTabActivity のこれらの2行から来ています...

setContentView(R.layout.my_tab_activity);

...そして...

String fieldValue = ((TextView) findViewById(R.id.text_field)).getText().toString();

...あなたが明らかに findViewById(R.id.text_field)が原因であることは明らかですが。

findViewById(...)を使用すると、現在のアクティビティの一部として拡張されたUI要素にアクセスしようとする場合にのみ機能します。 my_tab_activity.xml R.id.text_field のリソースIDを持つ TextView が存在しないので、これは決してうまくいかないでしょう。

TabHost / TabActivity のタブ内容であるアクティビティへのアクセスは難しいです。私の提案は、あなたのアプリのどこからでもアクセスできる SharedPreferences を使うことです。 TextView (または他のユーザ入力項目)が変更されたら、それがどのアクティビティ/タブであるかを識別する 'key'を使って SharedPreferences に保存します。その後、 TabActivity はデータを簡単に照合することができます。

2
追加された

getLocalActivityManager()または getCurrentActivity()。戻ってきたアクティビティオブジェクトについてはactivity.findViewById()を実行して、特定のアクティビティ内のビューへの参照を取得できます。しかし、TabActivityは推奨されておらず、フラグメントを使ってあなたが探していることをやりなさい。 3.0より前のバージョンのAndroidをターゲットにしている場合は、互換ライブラリを使用できます。フラグメントにアクセスする。

1
追加された