[英]onCreateView Fragment layout in android
我正在使用片段布局,所以我使用了onCreateView
,然后使用了onActivityCreated
方法,但我收到“APP Stopped Working”。
package com.example.textspeech;
public class Text extends Fragment{
TextToSpeech t;
private EditText write;
Spinner spi;
SeekBar sb;
public Text(){}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.text_to_speech, container, false);
return rootView;
}
public void onActivityCreated(Bundle savedInstanceState1) {
super.onActivityCreated(savedInstanceState1);
spi = (Spinner) getActivity().findViewById(R.id.spinner1);
ArrayAdapter<CharSequence> apt = ArrayAdapter.createFromResource(getActivity().getBaseContext(), R.array.name,android.R.layout.simple_list_item_single_choice);
apt.setDropDownViewResource(android.R.layout.simple_list_item_single_choice);
spi.setAdapter(apt);
spi.setOnItemSelectedListener(new function1());
write = (EditText) getActivity().findViewById(R.id.editText1);
}
@Override
public void onPause(){
if(t !=null){
t.stop();
t.shutdown();
}
super.onPause();
}
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getActivity().getMenuInflater().inflate(R.menu.main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle presses on the action bar items
switch (item.getItemId()) {
case R.id.action_settings:
return true;
default:
return super.onOptionsItemSelected(item);
}
}
public void speakText(View view){
String toSpeak = write.getText().toString();
t.speak(toSpeak, TextToSpeech.QUEUE_FLUSH, null);
}
public class function1 implements OnItemSelectedListener{
@Override
public void onItemSelected(AdapterView<?> arg0, View arg1, int pos,
long arg3) {
// TODO Auto-generated method stub
if(pos==0){
t=new TextToSpeech(getActivity(),new TextToSpeech.OnInitListener() {
@Override
public void onInit(int status) {
if(status != TextToSpeech.ERROR){
t.setLanguage(Locale.US);
t.setSpeechRate(1);
t.setPitch(1);
}
}
});
}
}
@Override
public void onNothingSelected(AdapterView<?> arg0) {
// TODO Auto-generated method stub
}
}
}
這是按鈕 xml
<Button
android:id="@+id/button1"
android:layout_width="240dp"
android:layout_height="60dp"
android:text="Speak"
android:textColor="#AD2A10"
android:textSize="35sp"
android:onClick="speakText" />
每當我按下按鈕時,應用程序就會停止響應。 這是 logcat
03-29 06:52:45.876: E/AndroidRuntime(816): FATAL EXCEPTION: main
**03-29 06:52:45.876: E/AndroidRuntime(816): java.lang.IllegalStateException: Could not find a method speakText(View) in the activity class com.example.textspeech.MainActivity for onClick handler on view class android.widget.Button with id 'button1'**
03-29 06:52:45.876: E/AndroidRuntime(816): at android.view.View$1.onClick(View.java:3620)
03-29 06:52:45.876: E/AndroidRuntime(816): at android.view.View.performClick(View.java:4240)
03-29 06:52:45.876: E/AndroidRuntime(816): at android.view.View$PerformClick.run(View.java:17721)
03-29 06:52:45.876: E/AndroidRuntime(816): at android.os.Handler.handleCallback(Handler.java:730)
03-29 06:52:45.876: E/AndroidRuntime(816): at android.os.Handler.dispatchMessage(Handler.java:92)
03-29 06:52:45.876: E/AndroidRuntime(816): at android.os.Looper.loop(Looper.java:137)
03-29 06:52:45.876: E/AndroidRuntime(816): at android.app.ActivityThread.main(ActivityThread.java:5103)
03-29 06:52:45.876: E/AndroidRuntime(816): at java.lang.reflect.Method.invokeNative(Native Method)
03-29 06:52:45.876: E/AndroidRuntime(816): at java.lang.reflect.Method.invoke(Method.java:525)
03-29 06:52:45.876: E/AndroidRuntime(816): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)
03-29 06:52:45.876: E/AndroidRuntime(816): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
03-29 06:52:45.876: E/AndroidRuntime(816): at dalvik.system.NativeStart.main(Native Method)
03-29 06:52:45.876: E/AndroidRuntime(816): Caused by: java.lang.NoSuchMethodException: speakText [class android.view.View]
03-29 06:52:45.876: E/AndroidRuntime(816): at java.lang.Class.getConstructorOrMethod(Class.java:423)
03-29 06:52:45.876: E/AndroidRuntime(816): at java.lang.Class.getMethod(Class.java:787)
03-29 06:52:45.876: E/AndroidRuntime(816): at android.view.View$1.onClick(View.java:3613)
在此logcat中,我應該在活動 class com.example.textspeech.Text 中找不到方法 speakText(View) 但我在活動 class com.example.textspeech.MainActivity 中找不到方法 speakText(View)
因為在單擊按鈕時,您會在Button單擊方法中獲得write.getText(),並且已在onActivityCreate中初始化了EditText,但是Fragments運行了onCreateView方法,因此您必須初始化
write = (EditText) getActivity().findViewById(R.id.editText1);
在
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.text_to_speech, container, false);
write = (EditText)rootView.findViewById(R.id.editText1);
return rootView;
}
這可能是您的問題。 試試吧。
將其用於每個聲明。
button = (Button) rootView.findViewById(R.id.button1);
write = (EditText) rootView.findViewById(R.id.editText1);
看起來它正在您的 Activity 中尋找 speakText() function,它存在於您的 Fragment 中。 button1 有一個 onClick() 處理程序(我在您發布的代碼示例中沒有看到它,也許我錯過了它)引用 speakText() 但它以某種方式在您的 Activity 中而不是在您的 Fragment 中。 它在MainActivity中尋找function,你可以看到。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.