这应该很简单,但即使阅读其他解决方案,我也无法得到它...... 我只是想从另一个类(它在不同的文件中)中使用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",是吗?
答案 0 :(得分:1)
不需要Activity类的构造函数。
碎片必须没有arg构造函数
以下活动是错误的
private TextView label0 = (TextView) findViewById(R.id.label0);
MyDialog d = new MyDialog(this);
片段可以使用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();
你应该好好去。