【问题标题】:pass UI Controls from activity to a class将 UI 控件从活动传递到类
【发布时间】:2012-10-23 14:42:46
【问题描述】:

我多次遇到这个问题,我以不同的方式解决了这个问题,但我不确定我是否以正确的方式解决了这个问题。 我在以下示例中简化了问题。我知道我只能将数据传递给类,但我确实想传递 editText,因为我遇到了更难的 UI 控件的问题。

mainactivity.java

public class mainactivity extends Activity {

    public EditText clickEditText;
    int count =0;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        newTxt();
    }

    public void newTxt() {
        txt = new MyText(context);
        txt.updateTextEdit("Main Activity");
    }
}

myText.java

public class MyText
{
    private Context _context;

    // constructor
    public MyText(Context context) 
    {
        _context = context;
    }

    public void updateTextEdit(String str)
    {
        private EditText strEditText;
        strEditText= (EditText)findViewById(_context.R.id.editTextClick); // ????
        strEditText.setText(str + " and myTxt");
    }
} 

如果你能解释一下如何修复 updateTextEdit 函数。我通过了主要活动的上下文。如何更改编辑文本?非常感谢!!!

【问题讨论】:

    标签: android class android-activity


    【解决方案1】:

    如果你真的想这样做,你需要保存对Activity的引用,而不是Context。像这样:

    public class MyText
    {
        private Activity _activity;
    
        // constructor
        public MyText(Activity activity) 
        {
            _activity= activity;
        }
    
        public void updateTextEdit(String str)
        {
            private EditText strEditText;
            strEditText= (EditText)activity.findViewById(R.id.editTextClick);
            strEditText.setText(str + " and myTxt");
        }
    }
    

    newTxt() 中,您需要进行更改:

    txt = new MyText(context);
    

    到:

    txt = new MyText(this);
    

    但是将这个方法放在你的活动中不是更容易吗?你为什么要把它放在另一个班级?如果它确实需要在另一个类中,您可以将该类设置为您的活动的内部类,您仍然可以访问活动的方法和成员变量。

    【讨论】:

    • 谢谢大卫。我会再考虑将类更改为内部类。我认为如果它不同会更好,因为我可以从不同的活动中访问它,但只要我在我的应用程序中推进,只有一个活动使用它。
    • 如果这个答案对你有用,你应该通过点击答案的复选标记来接受它。
    【解决方案2】:

    这里有一个类似的问题 How to access Activity UI from my class?

    你没有说你是如何获得上下文的,你应该使用this并在其他类中获取mainactivity。不是上下文。

    然后您可以致电runOnUIThread 执行 UI 更新。

    【讨论】:

    • 我在发布我的问题之前看到了这一点,但直到现在我才理解它。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2016-05-26
    • 2011-12-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-26
    相关资源
    最近更新 更多