日本语が怪レい日本人

À la recherche du futur perdu

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;
    }
}

自分用のメモなんで雑です。俺がわかればいいや