当前位置: 首页 > 知识库问答 >
问题:

为textview设置文本,该文本位于另一个fragments onClick事件的片段中

夏新翰
2023-03-14

我是新来的,所以请容忍我。

我试图设置文本视图中的一个片段的onClick方法,但我一直得到这个错误:

不能从静态上下文引用非静态字段"text View"

我尝试过的一切都没有奏效,所以我请求帮助。

我有一个片段,它有一个按钮,我想设置textView的文本:

PullFragment。JAVA

public class PullFragment extends Fragment implements View.OnClickListener {

public PullFragment() {
    // Required empty public constructor
}

@Override
public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    // Inflate the layout for this fragment
    View view =  inflater.inflate(R.layout.fragment_pull, container, false);

    //The button
    ImageButton toolbarButtonPull;
    toolbarButtonPull = view.findViewById(R.id.toolbarButtonPull);
    toolbarButtonPull.setOnClickListener(this);

    return view;
}

@Override
public void onClick (View v) {
    switch (v.getId()) {
        case R.id.toolbarButtonPull:
            // Here is the button onClick event
            break;
    }
}
}

这是另一个包含文本视图的片段:

占位符片段。JAVA

public class PlaceholderFragment extends Fragment {

public TextView textView;

public PlaceholderFragment() {}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    View rootView = inflater.inflate(R.layout.tab_pull, container, false);
    // Here is the textView I want to change
    textView = rootView.findViewById(R.id.textView);
    return rootView;
}
}

我已经尝试了以下在点击事件:

PlaceholderFragment.textView.setText("Test");

//Or trying to call public void Test which just does "textView.setText("Text");"

PlaceholderFragment.Test();

不能从静态上下文引用非静态字段"text View"

PlaceholderFragment placeholderFragment = new PlaceholderFragment();
placeholderFragment.textView.setText("Text");

//Or trying to call public void Test which just does "textView.setText("Text");"

PlaceholderFragment placeholderFragment = new PlaceholderFragment();
placeholderFragment.Test();

尝试在null对象引用上调用虚拟方法android.widget.EditText.setText(java.lang.CharSequence)

也许我错过了一些简单的东西,但我在这方面没有取得任何进展。

共有2个答案

司寇烨伟
2023-03-14

第一个问题:

我已经尝试了以下在点击事件:

PlaceholderFragment.textView.setText("Test");

//Or trying to call public void Test which just does "textView.setText("Text");"

PlaceholderFragment.Test();

不能从静态上下文引用非静态字段"text View"

错误非静态字段"text View"不能从静态上下文中引用,因为如果不实例化对象,您就无法访问变量或类的方法。除非您将其设为静态变量或静态方法。所以,您需要像这样将它们设为静态:

public class PlaceholderFragment extends Fragment {

  public static TextView textView;

  public PlaceholderFragment() {}

  ...

  public static void test() {
    ...
  }
}

第二个问题:

PlaceholderFragment placeholderFragment = new PlaceholderFragment();  
placeholderFragment.textView.setText("Text");

//Or trying to call public void Test which just does "textView.setText("Text");"

PlaceholderFragment placeholderFragment = new PlaceholderFragment();  
placeholderFragment.Test();

尝试在null对象引用上调用虚拟方法android.widget.EditText.setText(java.lang.CharSequence)

错误:尝试调用虚拟方法“void”。小装置。编辑文本。空对象引用上的setText(java.lang.CharSequence)也是可以预期的。这是因为当你打以下电话时:

PlaceholderFragment placeholderFragment = new PlaceholderFragment();    
placeholderFragment.textView.setText("Text");

占位符片段尚未完全实例化。这是因为片段创建不是一个同步过程。所以,当你调用占位符片段时。文本视图。setText(“文本”) 文本视图尚未创建并绑定到片段。您需要通过参数设置文本,或者等待片段完全创建。

杭志泽
2023-03-14

谷歌建议使用接口进行片段之间的通信,见留档:https://developer.android.com/training/basics/fragments/communicating

此外,我认为这是一个很好的教程,使用activity的shared ViewModel在片段之间传输数据。

 类似资料:
  • 我该怎么做?现在我得到一个:java.lang.NullPointerException:尝试对空对象引用调用虚拟方法'void Android.Widget.TextView.SetText(java.lang.CharSequence)' FragmentRonde1.java 下面是片段的类,其中ListCLickedTitle为:ListClickedFragment logcat

  • 大家早上好。我从标题中知道它是一切都混淆了,所以我会试着解释得更好。我需要为一个医疗项目创建一个计算糖化血红蛋白的应用程序。我有3个编辑文本,我在其中输入医学测试的值。三者中的每一个都因另一个而改变。举个例子:如果我一个有42,另一个是5.99%。诸如此类。我试图让它们动态地变化:在我写作的过程中保持不变。我尝试使用OnCliclListener,但是我必须写完整的值。 我不知道我解释得好不好让你

  • 问题内容: 确实需要一些建议,不知道这里出了什么问题。 上下文:2个片段,每个片段都有一个Textview,主要活动有2个按钮和一个edittext 目的:在主活动的edittext框中键入hello,然后单击片段1的按钮,textview将变为hello。 问题: 在edittext中输入hello并单击按钮1时,会遇到运行时错误。 Logcat: fragment_one.xml activi

  • 如何将一个文本的值追加到另一个文本文件中的特定位置? One.txt Second.txt 需要将second.txt中的one.txt值放置在{}中提到的名称所在的位置。 输出:

  • 问题内容: 我想将某些文本行从一个文本文件复制到另一个文件。在我当前的脚本中,当我搜索字符串时,它会随后复制所有内容,如何只复制文本的特定部分?例如,仅在其中包含“ tests / file / myword”的情况下才复制行? 当前代码: 问题答案: 单线: 推荐搭配: 使用更少的内存:

  • 如何将一个文本文件复制到另一个文本文件中?我试过这个: 这只是在中留下以下值:。 我做错了什么?