从具有不同布局的Activity中访问布局的TextView

时间:2018-07-29 12:50:09

标签: java android android-layout textview android-navigation-drawer

我有一个mainActivity.java类,其布局名为activity_main.xml和一个名为drawer_menu.xml的.xml文件,其中有一个textView显示在应用程序的drawer menu中我想将抽屉菜单的textView文本设置为我在String类中拥有的mainActivity.java值。 如何在mainActivity类中访问该textView?

activity_main.java(访问textView的部分):

    /**
 * Prompts the user for his/her username
 * when the tutorial is done
 */
private void promptForUsername() {
    UsernameDialog dialog = new UsernameDialog();
    dialog.setCancelable(false);
    dialog.show(getFragmentManager(),"USERNAME_DIALOG");
    username.setText(getUsername());
}

public void setUsername(String name) {
    tempName = name;
}

public String getUsername() {
    return tempName;
}

UsernameDialog.java类:

public class UsernameDialog extends DialogFragment {

@BindView(R.id.editText) EditText mEditText;

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

@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {

    // inflate the layout using the dialog themed context
    final Context context = getActivity();
    final LayoutInflater inflater = LayoutInflater.from(context);
    final View view = inflater.inflate(R.layout.username_dialog,null,false);

    final MainActivity activity = new MainActivity();

    ButterKnife.bind(this,view);

    DialogInterface.OnClickListener posListener = new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialogInterface, int i) {
            activity.setUsername(mEditText.getText().toString());
            Log.d("USERNAME",mEditText.getText().toString());
        }
    };

    AlertDialog.Builder builder = new AlertDialog.Builder(getActivity())
            .setTitle("Choose your username")
            .setView(view)
            .setPositiveButton("OK",posListener);
    return builder.create();
}
}

drawer_menu.xml(包含要访问的TextView):

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="100dp"
android:background="@color/NavigationDrawerHeader">

<ImageView
    android:id="@+id/menu_logo"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentStart="true"
    android:layout_alignParentTop="true"
    android:layout_marginStart="18dp"
    android:layout_marginTop="10dp"
    android:adjustViewBounds="true"
    android:contentDescription="@string/logo"
    app:srcCompat="@drawable/user_icon" />

<TextView
    android:id="@+id/username"
    android:layout_width="wrap_content"
    android:layout_height="66dp"
    android:layout_alignParentStart="true"
    android:layout_alignTop="@+id/menu_logo"
    android:layout_marginStart="93dp"
    android:layout_marginTop="5dp"
    android:fontFamily="@font/alegreya_sans_extrabold"
    android:paddingTop="25dp"
    android:text="username"
    android:textColor="#ffffff"
    android:textSize="18sp" />

</RelativeLayout>

4 个答案:

答案 0 :(得分:1)

onCreate()的{​​{1}}方法末尾尝试此代码

MainActivity.java

答案 1 :(得分:0)

您可以定义

    static TextView tv; 

并且可以从其他班级访问

答案 2 :(得分:0)

没有人建议使用静态视图。进一步了解here

现在,根据您的情况,您可以创建一个String资源,以便能够在两个活动中使用相同的文本。怎么做?此处:

  • 在您的strings.xml中添加这样的字符串
<string name="my_string">what ever u want to put here </string>
  • 添加TextView
 TextView textView = (TextView) findViewById(R.id.Id_of_TextView);
 textView.setText(getString(R.id.my_string));

OR

您可以直接在两个textview的xml中添加该字符串。

要获取变量中的字符串值,可以使用

String temp = getResources().getString(R.string.my_string);

答案 3 :(得分:0)

如果在xml布局文件中给textview一个id,则可以使用TextView myTextView =(TextView)findViewById(R.id.myTextView);