谁能解释一下这部分代码“((MainActivity)getActivity()).someMethod()”的含义?

德佐

我创建了一个 ListDialog 扩展了一个 DialogFragment 类,但我在理解 DijalogX 类中的这段代码时遇到了问题

((MainActivity)getActivity()).setTextField(selectedItem);

我知道通过上面的这段代码,我将选定的 String 变量作为参数放入 setTextField 方法,然后该变量显示在 MainActivity 类的 TextView 中。

我的问题:

  • 为什么我需要从 getActivity() 到 MainActivity 的转换,以及如何从 DijalogX(fragment) 访问 MainActivity 中的 setTextField 方法?请稍微解释一下这个过程。
  • 我也尝试过而不是 ((MainActivity)getActivity()).setTextField(selectedItem) 使用接口,一切正常,我得到了相同的结果,但我想知道这里接口或 ((MainActivity)getActivity()) 有什么更好的解决方案.setTextField(selectedItem)?

主要活动

package com.example.dezox.dijaloglist;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity{

private Button btnStartDialog;
private TextView tvSelectedOption;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    initWidgets();
    setupListener();
}

private void initWidgets() {
    btnStartDialog = findViewById(R.id.btnDialog);
    tvSelectedOption = findViewById(R.id.tvselectedOption);
}

private void setupListener() {
    btnStartDialog.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            DijalogX dijalogX = new DijalogX();
            dijalogX.show(getSupportFragmentManager(), "dx");
            tvSelectedOption.setText("");

        }
    });
}



public void setTextField(String odabrano){
    tvSelectedOption.setText(odabrano);
}

public String getTextField(){
    return tvSelectedOption.getText().toString();
}
}

对话X

package com.example.dezox.dijaloglist;

import android.app.Dialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v4.app.DialogFragment;
import android.support.v7.app.AlertDialog;


public class DijalogX extends DialogFragment {


    private String[] languageList;



    @Override
    public void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        initListResource();
    }

    private void initListResource() {
        languageList = getResources().getStringArray(R.array.language_list);
    }

    @NonNull
    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
    AlertDialog.Builder builder = new AlertDialog.Builder(getActivity(), 
    android.R.style.Theme_Material_Dialog_Alert)
                .setTitle("Select Language: ")
                .setItems(languageList, new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        String selectedItem = languageList[which];





//THIS PART OF THE CODE I DONT UNDERSTAND:
((MainActivity)getActivity()).setTextField(selectedItem);



                    }
                });

        return builder.create();
    }


}
泰勒五世

您已经在MainActivity调用中声明了一个方法setTextField如果你打电话

Activity a = getActivity();

您将无法调用您的自定义方法(它在您的派生类上,而不是在基Activity类上)。

a.setTextField(selectedIte); // WON'T WORK - NO SUCH METHOD

如果你打电话

MainActivity ma = (MainActivity)getActivity();

它现在被转换为您的派生类,然后您可以调用

ma.setTextField(selectedItem);

像这样在两行中执行此操作与在代码中调用单行代码相同

((MainActivity)getActivity()).setTextField(selectedItem);

就转换与接口而言,接口是一种更灵活的方法。如果您尝试在不同的活动(不是MainActivity)中使用此片段,则转换方法将失败。如果您只打算在此 Activity 中使用片段,那么两者都可以。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

谁能解释一下这部分代码吗?

来自分类Dev

谁能解释代码putchar('/'// * / 1)的含义

来自分类Dev

谁能解释一下CGRectZero的用途

来自分类Dev

谁能解释一下Perl程序的行为

来自分类Dev

谁能解释一下公式

来自分类Dev

谁能解释一下上面的代码如何工作以及使用哪个概念?

来自分类Dev

我是 android Java 的初学者。谁能解释一下代码

来自分类Dev

谁能解释一下这段代码的第 3 行吗?

来自分类Dev

请谁能解释一下这个递归代码?

来自分类Dev

谁能解释一下这段代码?为什么显示 1

来自分类Dev

SomeClass。<OtherClass> someMethod()语法含义

来自分类Dev

有人可以解释一下用Python编写的此语句的含义吗?

来自分类Dev

您能解释一下php代码吗

来自分类Dev

谁能解释一下这段代码如何创建一个实现接口并实例化该类的类?

来自分类Dev

谁能解释一下在以下情况下如何分配大小?

来自分类Dev

谁能解释一下jquery中函数的执行过程

来自分类Dev

谁能解释一下导致CPU过热的原因

来自分类Dev

谁能解释一下什么是Django modelform_factory和modelformset_factory?

来自分类Dev

谁能解释一下 ptr+1 和 ptr[0]+1 之间的区别

来自分类Dev

谁能解释一下“if”语句是如何在这里执行的

来自分类Dev

MSMQ 如何与 Hangfire 配合使用。谁能解释一下流程?

来自分类Dev

为什么下面的程序输出是 5,而不是 4?谁能解释一下?

来自分类Dev

令人困惑的 CSS - 谁能解释一下

来自分类Dev

有人可以解释一下“ process.argv”在node.js中的含义吗?

来自分类Dev

有人可以解释一下程序中下面两行的含义来实现管道吗?

来自分类Dev

你能解释一下这段代码的最后一部分吗?

来自分类Dev

谁能解释一下另一个函数中函数的这种行为?

来自分类Dev

解释一下代码?

来自分类Dev

您能解释一下此Typescript代码段吗?

Related 相关文章

  1. 1

    谁能解释一下这部分代码吗?

  2. 2

    谁能解释代码putchar('/'// * / 1)的含义

  3. 3

    谁能解释一下CGRectZero的用途

  4. 4

    谁能解释一下Perl程序的行为

  5. 5

    谁能解释一下公式

  6. 6

    谁能解释一下上面的代码如何工作以及使用哪个概念?

  7. 7

    我是 android Java 的初学者。谁能解释一下代码

  8. 8

    谁能解释一下这段代码的第 3 行吗?

  9. 9

    请谁能解释一下这个递归代码?

  10. 10

    谁能解释一下这段代码?为什么显示 1

  11. 11

    SomeClass。<OtherClass> someMethod()语法含义

  12. 12

    有人可以解释一下用Python编写的此语句的含义吗?

  13. 13

    您能解释一下php代码吗

  14. 14

    谁能解释一下这段代码如何创建一个实现接口并实例化该类的类?

  15. 15

    谁能解释一下在以下情况下如何分配大小?

  16. 16

    谁能解释一下jquery中函数的执行过程

  17. 17

    谁能解释一下导致CPU过热的原因

  18. 18

    谁能解释一下什么是Django modelform_factory和modelformset_factory?

  19. 19

    谁能解释一下 ptr+1 和 ptr[0]+1 之间的区别

  20. 20

    谁能解释一下“if”语句是如何在这里执行的

  21. 21

    MSMQ 如何与 Hangfire 配合使用。谁能解释一下流程?

  22. 22

    为什么下面的程序输出是 5,而不是 4?谁能解释一下?

  23. 23

    令人困惑的 CSS - 谁能解释一下

  24. 24

    有人可以解释一下“ process.argv”在node.js中的含义吗?

  25. 25

    有人可以解释一下程序中下面两行的含义来实现管道吗?

  26. 26

    你能解释一下这段代码的最后一部分吗?

  27. 27

    谁能解释一下另一个函数中函数的这种行为?

  28. 28

    解释一下代码?

  29. 29

    您能解释一下此Typescript代码段吗?

热门标签

归档