Button Klick reagiert nur hin und wieder

  • Antworten:4
Viktor Sticher
  • Forum-Beiträge: 11

07.06.2014, 13:59:51 via Website

Hallo,

Ich hätte gerne die google Sprachsuche in meinem Programm implementiert, sodass nach einem Klick auf einem Button sich die Spracheingabe öffnet und das Gesagte in einem Textfeld erscheint.

Es öffnet sich auch die Spracheingabe, allerdings erst nach etwa 10 mal klicken. Zuerst habe ich es auf mehrere Arten mit einem OnClickListener versucht

findViewById(R.id.dictateButton).setOnClickListener(dictateButtonListener);
final OnClickListener dictateButtonListener = new OnClickListener(){

    public void onClick(final View view){



                Log.d("onClickListener", "onClickListener");
                speechToText();



    }
};

Oder so:

dictate.setOnClickListener(new OnClickListener(){

        @Override
        public void onClick(View v) {
            speechToText();

        }

    });

Nun habe ich zu diesem Button die OnClick Methode aufgerufen, die die Methode dictateButton aufruft:

public void dictateButton(View view){


    speechToText();

}

Meine speechToText() Methode sieht folgendermaßen aus:

    private void speechToText() {
    PackageManager packageManager = context.getPackageManager();
            List<ResolveInfo> infoList = packageManager.queryIntentActivities(new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH), 0);

    if (infoList.size() == 0) {
                Log.d("speechtoText", "speechtoText2");
                Toast.makeText(thisActivity,
                        "Ihr Gerät unterstützt leider keine Diktierfunktion",
                        Toast.LENGTH_LONG).show();
    } 
        else {
    try {
Intent speech = new Intent();
speech.setAction(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
                        Log.d("speech", "speech2 " + speech);
                        speech.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL,
                                RecognizerIntent.LANGUAGE_MODEL_FREE_FORM);

                        startActivityForResult(speech, SPEECH_RECOGNIZED);
if (speech != null) {
                            Log.d("speech", "speech3 " + speech);
                            ArrayList<String> result = speech
                                    .getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS);
                            Log.d("result", "result " + result);
                            if (!(result.isEmpty())) {

                                EditText text = (EditText) findViewById(R.id.textInput);
                                Log.d("text", "edittext " + text);
                                text.setText(result.get(0));
                                Log.d("text", "getText " + result.get(0));

                            } else {
                                Toast.makeText(thisActivity,
                                        "Leider kein Text erhalten",
                                        Toast.LENGTH_LONG).show();
                            }

                        }
    } catch (ActivityNotFoundException ex) {
                            Toast.makeText(thisActivity, "Activity nicht gefunden",
                                    Toast.LENGTH_LONG).show();
                            ex.printStackTrace();
                        }
                    }

Könnt ihr mir da weiterhelfen, warum der Button nur bei jedem 10. Klick reagiert?

Vielen Dank

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

08.06.2014, 20:19:58 via Website

Benutze den Debugger und setze einen Breakpoint in die onClick damit du weißt ob es an deinem Programm oder an der Buttonreaktion liegt.

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
Viktor Sticher
  • Forum-Beiträge: 11

13.06.2014, 20:40:34 via Website

Hat dann doch noch geklappt, danke dennoch für den Hinweis.

Ich habe noch ein anderes Problem. Und zwar nutze ich bei einem FrameLayout eine ScrollView, jedoch lässt sich die View ganz wenig nach unten Scrollen. Zu wenig um meine Elemente platzieren zu können. Werden Elemente unterhalb dieses Bereiches angeordnet vergrößert dies nicht etwa die Scrollview, sondern verschwinden einfach.

Was kann ich dagegen machen? Der betreffende Teil meiner XML (den Link bei der ScrollView gibt es natürlich auch, aber darf ich nicht veröffentlichen)

<ScrollView 
android:id="@+id/openproctid"
android:layout_width="match_parent"
android:layout_height="fill_parent"
 android:background="#FFFFFF"
android:fillViewport="true" >

<FrameLayout

    android:id="@+id/FrameLayout1"
     android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:layout_margin="15dp" >

Vielen Dank

Antworten
Viktor Sticher
  • Forum-Beiträge: 11

14.06.2014, 15:45:02 via Website

Genial. Das ist genau das, was ich gesucht hatte. Hat funktioniert.

Nun habe ich das Problem dass ich es nicht schaffe ein Edittext auszulesen. Mein Problem dabei ist, dass das Edittext in einem anderen Layout befindet, in dem es ausgelesen werden soll. Dieses Edittext ist Bestandteil einer Dialogbox und meine Buttons, welche ich daraufhin erstelle sollen diesen Text erhalten.

In meiner Hauptklasse Collection rufe ich die Methode onaddButtonClick( ) dann auf, sobald man den Add Button der Actionbar geklick hat. Diese baut die Dialogbox auf. Da mir nichts mehr eingefallen ist, habe ich zuerst setContentView(R.layout.activity_collection) welche zur Hauptklasse gehört, dann in der Hauptklasse SetContentView(R.layout.dialogbox) damit der Edittext gefuinden wird.

Zwar findet er den Edittext nun zwar, aber egal was ich eingebe bleibt text.getText( ).toString( ) leer. Außerdem ist das absolut keine gute Lösung in der Hauptklasse setContentView(R.layout.dialogbox) zu schreiben.

AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(
            context);
LayoutInflater inflater = thisActivity.getLayoutInflater();
alertDialogBuilder
                .setView(inflater.inflate(R.layout.dialogbox, null))
                //.setMessage(R.string.name)
                .setCancelable(false)





            .setPositiveButton(R.string.ok,
                    new DialogInterface.OnClickListener() {
                        public void onClick(DialogInterface dialog, int id) {
                            setContentView(R.layout.dialogbox);
                            EditText text2 = (EditText) findViewById(R.id.projectname2);

                            Log.d("text2.getText().toString();" , "text2.getText().toString();" + text2.getText().toString());
                            newProjectButton(dialog, id);
                            db.addProject("Bitte Implementieren"); // TODO DO IT
                            drawAllProjects("B");
                        }
                    })
            .setNegativeButton(R.string.cancel,
                    new DialogInterface.OnClickListener() {
                        public void onClick(DialogInterface dialog, int id) {
                            // if this button is clicked, just close
                            // the dialog box and do nothing

                            // zurückkehren zur aktuellen View
                            dialog.cancel();
                        }
                    });
    setContentView(R.layout.activity_collection);

    // create alert dialog
    AlertDialog alertDialog = alertDialogBuilder.create();

    // show it
    alertDialog.show();

}

Habt ihr eine Idee, wie ich auf den Text des Edittextes der Dialogbox aus der Hauptklasse zugreifen kann?

Antworten