Android Studio 他クラスからfindViewById()したい。
[他クラスからTextViewをいじる](https://teratail.com/questions/94972)
を参考にさせていただきました
悩み
Androidアプリ開発で、画面クラスでないほかのクラスから画面を弄る方法を半日かけて悩みました。
実現したい内容は
TextViewの BoxIDText NameBoxTextから文字を読み取って、String型の変数に入れる。
読み取った値をURLのパラメータに使う。です
結論
EditText editText =(EditText) ((com.example.project1.MainActivity) conText).findViewById(id);
のようにすればいいです。(適当)
ただ、contextをきちんと設定する必要があるので
protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); context =this; //ミソ①
のようにしましょう。
以下コードです
package com.example.project1; import androidx.appcompat.app.AppCompatActivity; import android.content.Context; import android.net.Uri; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.TextView; import android.content.Intent; public class MainActivity extends AppCompatActivity { private Button button; private TextView textView; private Context context; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); context =this; //ミソ① button = findViewById(R.id.button); button.setOnClickListener(new View.OnClickListener(){ @Override public void onClick(View view){ URLRequest urlRequest = new URLRequest(context); urlRequest.setSrtng(); //TextViewの各文字列を取得 String URL = urlRequest.Url(); //URLを取得 try { //URLを開く Uri uri = Uri.parse(URL); Intent i = new Intent(Intent.ACTION_VIEW,uri); startActivity(i); } catch (Exception e) { System.out.println(e.toString()); } } }); } }
package com.example.project1; import android.content.Context; import android.widget.EditText; import java.util.PriorityQueue; public class URLRequest extends MainActivity { private Context conText; //コンストラクタ URLRequest(Context context){ conText =context; } private String BoxID,Name,Tags,Status; public String getstring(int id){ //新しいJDKなら(EditText)のようにキャストしなくてもいい EditText editText =(EditText) ((com.example.project1.MainActivity) conText).findViewById(id); String parameter =editText.getText().toString(); // editText.setText(""); //テキストをクリア return parameter; } public void setSrtng(){ //TextViewの各文字列を取得 //テキストボックスから取得 BoxID = getstring(R.id.BoxIDText); Name = getstring(R.id.NameBoxText); Tags = getstring(R.id.TagsBoxText); Status= getstring(R.id.StatusBoxText); } public String Url(){ String URL = "https:/hoge.com/?" +"boxid=" + BoxID + "&name=" + Name + "&tag=" + Tags + "&status=" + Status; return URL; } }
自分用のメモなんで雑です。俺がわかればいいや