【问题标题】:Changing TextView Attributes from button onClick not working从按钮 onClick 更改 TextView 属性不起作用
【发布时间】:2020-11-12 03:04:37
【问题描述】:

所以我有一个名为 fragment_home 的 xml 片段。在cardview中有2个按钮和一个textview。按钮之一(尝试)更改文本视图中的值。在这两个按钮上我都有一个 onClick。片段的 tools:context 设置为 .MainActivity。我还有一个与 xml 片段相关联的扩展片段类。

每当我尝试调用任何东西来更改 TextView 属性(例如 setText、setTextSize)时,都会出现异常:java.lang.IllegalStateException: Could not execute method for android:onClick

如果我没有 setText,setTextSize,onClick 有效。

主活动:

public class MainActivity extends AppCompatActivity {

private int textViewData;
private TextView inputDataTextView;

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

    inputDataTextView= (TextView)findViewById(R.id.focus_counter);
}

//onClick For One of the buttons
    public void increaseNumber(View view) {
    textViewData++;
    // Crashes When I have This. Doesn't crash when I comment this.
    inputDataTextView.setTextSize(60);
    // Crashes When I have this. Doesn't crash when I comment this.
    inputDataTextView.setText(String.valueOf(textViewData);

    Toast.makeText(this, "TextView Value = " + textViewData, Toast.LENGTH_SHORT).show();
}

我觉得这与我的片段和活动有关。但我只是不知道问题是什么。一旦我在 onClick 中调用与 textview 相关的任何内容,应用程序就会崩溃。 xml中的textview最初设置为0,当我增加数字时,它会增加,这样就可以了。 感谢您的帮助!

HomeFragment:

public class HomeFragment extends Fragment {

private int textViewData;
private static final String TAG = "MyActivity";

private TextView inputDataTextView;

@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {

    View view = inflater.inflate(R.layout.fragment_home, container, false);

    inputDataTextView = view.findViewById(R.id.focus_counter);

    return view;
}

public void increaseNumber(View view) {
    textViewData++;
    //inputDataTextView.setText("t");
    inputDataTextView.setText(String.valueOf(inputViewData));
    //Toast.makeText(getContext(), "Focus Vale = " + inputViewData, Toast.LENGTH_SHORT).show();
}

}

【问题讨论】:

  • 向我们展示您的片段布局。
  • @Jason 我更新了帖子
  • 您的布局中没有android:onClick="increaseNumber"!!!
  • 对不起,那是我的错,为了保护我的项目,我必须在发布任何内容之前更改一些内容。我已使用正确的方法名称更新了 XML 文件。我在没有 set.Text 的情况下测试了 onclick,它工作正常,当我把它放进去时它崩溃了。
  • 请在错误时发布您的完整日志

标签: android android-studio android-fragments android-activity onclick


【解决方案1】:

您的inputDataTextView 为空,因为它在片段中,但您从 MainActivity 实例化它,这是错误的。将 onClick 方法和视图都移动到片段 java 代码中。

Edit在onCreateView之前将这些代码从MainActivity复制到HomeFragment:

private int textViewData;
private TextView inputDataTextView;

然后这些在onCreateView里面return语句之前:

 inputDataTextView= 
   (TextView)findViewById(R.id.focus_counter);

然后你的片段里面的这些方法:

 public void increaseNumber(View view) {
 textViewData++;
inputDataTextView.setTextSize(60);
inputDataTextView.setText(String.valueOf(textViewData);
Toast.makeText(this, "TextView Value = " + textViewData, Toast.LENGTH_SHORT).show();

}

现在应该可以工作了

【讨论】:

  • 这就是我的想法,但我怎么能用代码做到这一点??
  • 我确实有扩展 Fragment 的 HomeFragment 类。目前它上面什么都没有。因此,如果我想在片段类中执行 onClick,我该怎么办?现在我只是将 XML 中的 tools:context 更改为 .HomeFragment 并在片段类的 mainactivity 中执行了所有操作,但我遇到了同样的错误。
  • 好的,我已经按照介绍完成了,现在我收到错误:java.lang.IllegalStateException:在视图类上定义的 android:onClick 属性的父或祖先上下文中找不到方法 increaseNumber(View) androidx.appcompat.widget.AppCompatImageButton with id 'focus_plus_button' 我还在片段 XML 文件中更改了 tools:context=".HomeFragment"。基本上我不认为 Fragment 类和 Fragment XML 文件是关联在一起的。但我不知道如何解决。
  • 从xml中移除工具:上下文
猜你喜欢
  • 1970-01-01
  • 2018-07-11
  • 2018-05-10
  • 1970-01-01
  • 1970-01-01
  • 2012-03-26
  • 2015-02-24
  • 2017-10-23
  • 1970-01-01
相关资源
最近更新 更多