findViewById来自不同的类

时间:2014-08-24 09:17:13

标签: java android

这应该很简单,但即使阅读其他解决方案,我也无法得到它...... 我只是想从另一个类(它在不同的文件中)中使用findViewById访问TextView,该怎么做?

MainActivity

public class MainActivity extends ActionBarActivity {

    private TextView label0 = (TextView) findViewById(R.id.label0);
    MyDialog d = new MyDialog(this);

    public MainActivity(){

    }

    //other methods and stuff...
}

以下是必须访问TextView的 DialogFragment

public class MyDialog extends DialogFragment {

    private Activity MainActivity;
    private TextView label0;

    public MyDialog(Activity parent) {
    this.MainActivity = parent;
    }

@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {

    AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
    builder.setMessage(R.string.alert_content)
           .setPositiveButton(R.string.alert_button, new DialogInterface.OnClickListener() {
               public void onClick(DialogInterface dialog, int id) {

               //here it is, trying to access label0. This is one of the many tries
               label0 = MainActivity.findViewById(R.id.label0);

               //do other stuff...
}

我也多次读过这些观点" public static",是吗?

2 个答案:

答案 0 :(得分:1)

  1. 不需要Activity类的构造函数。

  2. 碎片必须没有arg构造函数

  3. 以下活动是错误的

    private TextView label0 = (TextView) findViewById(R.id.label0); MyDialog d = new MyDialog(this);

  4. 片段可以使用getActivity()访问Activity实例,并轻松执行诸如在活动布局中查找视图等任务。阅读与活动进行沟通 @ developer.android.com/guide/components/fragments.html

答案 1 :(得分:0)

将textview保存为活动的私有属性,并将其作为片段的getter公开。这是标准的做法。您需要将fragment.getActivity()投射到您的活动类型,然后访问textview作为getter。

编辑---------------- 在您已有private TextView label0的主要活动中,只需在onCreateView中填写其值即可。然后在您的活动中提供getter方法,以从活动外部访问此textView。

public TextView getLabelTextView(){
    return this.label0;
}

现在在您的片段中执行以下操作:

Activity activity = this.getActivity();
MainActivity myActivity = (MainActivity)activity;
TextView tv = myMactivity.getLabelTextView();

你应该好好去。