gpt4 book ai didi

java - 如何从 Activity 中编辑 fragment 中的textview

转载 作者:行者123 更新时间:2023-11-29 21:05:59 25 4
gpt4 key购买 nike

已解决

我想将新文本设置为 TextView。我在 MainActivity 中有 TextView 的新值,但此 Activity 不知道此 TextViewTextView 位于文件 fragment_main.xml 中。 fragment 类包含在 MainActivity.java 文件中,就像内部静态类一样。它是 Eclipse 中默认生成的带有 fragment 的 Activity 。你能帮帮我吗?

public class MainActivity extends FragmentActivity {

...

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

...

if (savedInstanceState == null) {
getSupportFragmentManager().beginTransaction()
.add(R.id.container, new PlaceholderFragment()).commit();
}
}

public static class PlaceholderFragment extends Fragment {
public PlaceholderFragment() { }

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_main, container, false);
return rootView;
}
}
}

activity_main.xml

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.zonemedia.skener.MainActivity"
tools:ignore="MergeRootFrame" />

fragment _main.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/viewmoje"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:baselineAligned="false"
android:orientation="vertical"
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.zonemedia.skener.MainActivity$PlaceholderFragment" >

<TextView
android:id="@+id/texturl"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/text_url" />
</LinearLayout>

编辑 1:我试图在 Fragment 中创建公共(public)方法 (=setter) 并从 FragmentActivity 中调用它。我还尝试直接从 fragment 更改文本: TextView textUrl = (TextView) getView().findViewById(R.id.texturl);
textCode.setText("随机");

我试过@masmic_87 写的。在我定义的 fragment 中TextView fragmentTextView = (TextView)getView().findViewById(R.id.texturl);

然后在 Activity 中我放入了您的代码。应用程序仍在崩溃:

java.lang.RuntimeException: 无法启动 Activity ComponentInfo{.....MainActivity}: java.lang.NullPointerException 由第 86 行引起:((PlaceholderFragment) fragment).fragmentTextView.setText("something");

最后,我尝试直接从静态 fragment 调用静态字符串,但 MainActivity.this 带有下划线,原因是:静态字段 MainActivity.this 应该以静态方式访问,并且在范围内无法访问类型 MainActivity 的封闭实例。

我还尝试将内部类 PlaceholderFragment 移动到新的 .java 文件,现在它不是静态的。我尝试了这里的所有建议,但没有任何效果

已解决我不知道我的头在哪里。在 fragment 中,我调用了 (TextView) getView().... 而不是

   View rootView = inflater.inflate(R.layout.fragment_main, container,false);
mTextView = (TextView) rootView.findViewById(R.id.texturl);
mTextView.setText("new text");

最佳答案

看看这是否适合您。

在 Activity 中引用您的 fragment :

PlaceholderFragment fragment = new PlaceholderFragment(); 

然后在 fragment 的 TextView 上定义您想要的文本:

((PlaceholderFragment)fragment).fragmentTextView.setText(text you want);

这将是随时将 TextView 的值传递给 fragment 。如果你想在调用 fragment 事务的那一刻传递这个值,最好是这样:

Bundle bundle = new Bundle();
bundle.putString("textview", "new_value");
PlaceholderFragment fragment= new PlaceholderFragment();
fragment.setArguments(bundle);
transaction.add(R.id.container, fragment);
transaction.commit();

关于java - 如何从 Activity 中编辑 fragment 中的textview,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24555996/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com