从按钮 onClick 更改 TextView 属性不起作用

Changing TextView Attributes from button onClick not working

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

每当我尝试调用任何东西来更改 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();
}

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

主页片段:

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();
}

}

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

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

private int textViewData;
private TextView inputDataTextView;

然后在 return 语句之前的 onCreateView 中的这些:

 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();

}

现在应该可以了