因此,我有一个名为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();
}
}
答案 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();
}
现在应该可以正常工作