1. ホーム
  2. android

[解決済み】androidでコンテキストからアクティビティを取得する方法

2022-04-17 12:28:37

質問

これは困りましたね。

私はカスタムレイアウトクラス内からアクティビティメソッドを呼び出す必要があります。この問題は、レイアウト内からアクティビティにアクセスする方法が分からないことです。

プロフィールビュー

public class ProfileView extends LinearLayout
{
    TextView profileTitleTextView;
    ImageView profileScreenImageButton;
    boolean isEmpty;
    ProfileData data;
    String name;

    public ProfileView(Context context, AttributeSet attrs, String name, final ProfileData profileData)
    {
        super(context, attrs);
        ......
        ......
    }

    //Heres where things get complicated
    public void onClick(View v)
    {
        //Need to get the parent activity and call its method.
        ProfileActivity x = (ProfileActivity) context;
        x.activityMethod();
    }
}

プロフィール活動

public class ProfileActivityActivity extends Activity
{
    //In here I am creating multiple ProfileViews and adding them to the activity dynamically.

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

    public void addProfilesToThisView()
    {
        ProfileData tempPd = new tempPd(.....)
        Context actvitiyContext = this.getApplicationContext();
        //Profile view needs context, null, name and a profileData
        ProfileView pv = new ProfileView(actvitiyContext, null, temp, tempPd);
        profileLayout.addView(pv);
    }
}

上記のように、profileViewをプログラムでインスタンス化し、それと一緒にactivityContextを渡しています。2つの質問があります。

  1. Profileview に正しいコンテキストを渡していますか?
  2. コンテキストから含むアクティビティを取得するにはどうすればよいですか?

解決方法は?

あなたの Activity を渡すだけです。 thisContext をレイアウトに使用します。

ProfileView pv = new ProfileView(this, null, temp, tempPd);

その後、あなたは Context がレイアウトに表示されますが、それが実際にはあなたの Activity で、それをキャストすることで、必要なものを手に入れることができます。

Activity activity = (Activity) context;