Android如何在MainActivity中使用java更改片段TextView
我使用java在activity_main.xml中插入一个片段,我将片段放在activity_main的线性布局中。 片段xml文件有一个textView 当应用程序使用java从MainActivity启动时、当应用程序启动时以及当它调用onCreate时,如何更改TextView? 我尝试了一些解决方案,但我可以让它工作。 Emulator在开始加载应用程序时崩溃 以下是activity_main.xml代码:Android如何在MainActivity中使用java更改片段TextView,java,android,fragment,Java,Android,Fragment,我使用java在activity_main.xml中插入一个片段,我将片段放在activity_main的线性布局中。 片段xml文件有一个textView 当应用程序使用java从MainActivity启动时、当应用程序启动时以及当它调用onCreate时,如何更改TextView? 我尝试了一些解决方案,但我可以让它工作。 Emulator在开始加载应用程序时崩溃 以下是activity_main.xml代码: <?xml version="1.0" encoding="utf-8"
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.example.android.fragment_promjenaviewprekojave.MainActivity">
<LinearLayout
android:id="@+id/linearLayoutFragment_id"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal">
</LinearLayout>
</LinearLayout>
这是只包含1个TextView的片段的xml文件
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.example.android.fragment_promjenaviewprekojave.BlankFragment">
<TextView
android:id="@+id/fragmentTextView_id"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</LinearLayout>
在
BlankFragment
代码中,更改
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
return inflater.inflate(R.layout.fragment_blank, container, false);
}
致:
现在回到你的活动中,你可以打电话
objA.setCustomText("Hello World!");
请记住,您需要在活动中存储对objA
的引用,例如
private BlankFragment objA;
然后,onCreate
将是:
objA = new BlankFragment();
最后,一旦视图全部就位并绘制完毕,此方法就可以正常工作。
如果希望在创建时更改片段内的文本,则需要在片段上使用newInstance
模式,在该模式中可以将文本作为参数传递
大概是这样的:
objA = BlankFragment.newInstance("Hello world");
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View v = inflater.inflate(R.layout.fragment_blank, container, false);
myTextView = (TextView) v.findViewById(R.id.fragmentTextView_id);
String text = getArguments().getString("TextTag", "");
myTextView .setText(text);
return (v);
}
其中,newInstance
在片段中定义如下:
public static BlankFragment newInstance(String str) {
BlankFragment f = new BlankFragment();
Bundle args = new Bundle();
args.putString("TextTag", str);
f.setArguments(args);
return (f);
}
然后您可以在片段的onCreate
中检索该值,如下所示:
objA = BlankFragment.newInstance("Hello world");
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View v = inflater.inflate(R.layout.fragment_blank, container, false);
myTextView = (TextView) v.findViewById(R.id.fragmentTextView_id);
String text = getArguments().getString("TextTag", "");
myTextView .setText(text);
return (v);
}
在
BlankFragment
代码中,更改
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
return inflater.inflate(R.layout.fragment_blank, container, false);
}
致:
现在回到你的活动中,你可以打电话
objA.setCustomText("Hello World!");
请记住,您需要在活动中存储对objA
的引用,例如
private BlankFragment objA;
然后,onCreate
将是:
objA = new BlankFragment();
最后,一旦视图全部就位并绘制完毕,此方法就可以正常工作。
如果希望在创建时更改片段内的文本,则需要在片段上使用newInstance
模式,在该模式中可以将文本作为参数传递
大概是这样的:
objA = BlankFragment.newInstance("Hello world");
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View v = inflater.inflate(R.layout.fragment_blank, container, false);
myTextView = (TextView) v.findViewById(R.id.fragmentTextView_id);
String text = getArguments().getString("TextTag", "");
myTextView .setText(text);
return (v);
}
其中,newInstance
在片段中定义如下:
public static BlankFragment newInstance(String str) {
BlankFragment f = new BlankFragment();
Bundle args = new Bundle();
args.putString("TextTag", str);
f.setArguments(args);
return (f);
}
然后您可以在片段的onCreate
中检索该值,如下所示:
objA = BlankFragment.newInstance("Hello world");
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View v = inflater.inflate(R.layout.fragment_blank, container, false);
myTextView = (TextView) v.findViewById(R.id.fragmentTextView_id);
String text = getArguments().getString("TextTag", "");
myTextView .setText(text);
return (v);
}
在xml中,应该有一个片段容器。假设此文件的ID为
片段\u ID
:
对于支持库
BlankFragment blankFrag = (BlankFragment)getSupportFragmentManager().
findFragmentById(R.id.fragment_id);
或者对于非支持库片段:
BlankFragment blankFrag = (BlankFragment)getFragmentManager().
findFragmentById(R.id.fragment_id);
您还需要在BlankFragment
类中使用一个带有签名的公共方法,如setTextViewText(String text)
,然后从MainActivity
调用它,如blankFrag.setTextViewText(“我的文本”)代码>在xml中,应该有一个片段容器。假设此文件的ID为片段\u ID
:
对于支持库
BlankFragment blankFrag = (BlankFragment)getSupportFragmentManager().
findFragmentById(R.id.fragment_id);
或者对于非支持库片段:
BlankFragment blankFrag = (BlankFragment)getFragmentManager().
findFragmentById(R.id.fragment_id);
您还需要在BlankFragment
类中使用一个带有签名的公共方法,如setTextViewText(String text)
,然后从MainActivity
调用它,如blankFrag.setTextViewText(“我的文本”)代码>它正在工作,但这是来自片段的更改。我可以从MainActivity.java更改它吗?它正在工作,但这是从fragment更改的。我可以从MainActivity.java更改它吗?