画面の別の部分からTextViewのコンテンツを動的に変更するにはどうすればよいですか?
TextViewとそれに続くいくつかのタブを含むRelativeLayoutを描画するTabActivityクラスがあります。各タブ内には個別のインテントがあります。タブインテントの1つから、親TabActvityからTextViewのテキストを(.setTextを介して)変更したいと思います。
これは可能ですか?
Androidアーキテクチャコンポーネントを使用する必要があります:
データオブジェクトのLiveDataを含むViewModelを作成できます(テキストのみを変更する場合)。LiveData<String>
ライブデータオブジェクトを他の1つActivityまたはFragmentすべてのアクティビティおよびフラグメントから変更すると、このライブデータオブジェクトを監視していることが通知されます。
TabActivityにTextViewのテキストを設定するパブリックメソッドを作成しgetParent()、子アクティビティから呼び出し、それをTabActivityクラスにキャストしてから、そのパブリックメソッドを呼び出します。
その仕事をする親タブのハンドラーを実装してみることができます。それぞれのタブからメッセージオブジェクトのテキストを渡します。安全のため、runOnUIブロック内のハンドラー内で変更を加えてください
asynctaskファイルからテキストを変更する場合は、リスナーとのインターフェースを実装する必要があります。例:
AsynctaskFile:
OnReadyListener onReadyListener;
public class ABCAsynctaskFile{
...
onReadyListener.onReady();
}
public interface OnReadyListener{
void onReady();
}
public void setOnReadyListener(OnReadyListener onReadyListener){
this.onReadyListener = onReadyListener;
}
ActivityFile:
public class ABC extends AppCompactActivity implements ABCAsynctaskFile.OnReadyListener{
..
ABCAsynctaskFile aBCAsynctaskFileObj = new ABCAsynctaskFile(context);
aBCAsynctaskFile.setOnReadyListener(ABC.this)
}
@Override
public void onReady(){
// Your wished changed in edit text.
}
この構造は、nullポインタ例外を防ぐのに役立ちます。