从按钮 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();
}
现在应该可以了
所以我有一个名为 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();
}
现在应该可以了