簡體   English   中英

android 中的 onCreateView 片段布局

[英]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,你可以看到。

Android 片段 onClick 按鈕方法

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM