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

时间:2020-07-22 14:20:46

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

因此,我有一个名为fragment_home的xml片段。在cardview内部有2个按钮和一个textview。按钮之一(尝试)更改textview中的值。在这两个按钮上,我都有一个 onClick 。片段的 tools:context 设置为 .MainActivity 。我也有一个与xml片段关联的扩展Fragment类。

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

如果我没有setText,setTextSize,则onClick可以使用。

MainActivity:

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

}

1 个答案:

答案 0 :(得分:2)

您的inputDataTextView为空,因为它是片段,但是您是从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();

}

现在应该可以正常工作