[OFFEN] Google-Spracherkennung funktioniert nicht im Tablayout

M

Matze02

Neues Mitglied
0
Hallo comunity!

Ich habe in eine App mithilfe eines YT-Tutorial die Google-Spracherkennung, welche den gesprochenen Text in ein TextView einfügt, eingebunden. Gestern habe ich zwei Activitys in der App durch das TabLayout zusammengefügt. Nur leider funktioniert das jetzt nicht mehr:

Code:
    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);

        if(requestCode == SPEAKING_INTENT_REQUEST_CODE && resultCode == RESULT_OK){
            ArrayList<String> speakingResult = data.getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS);

            String finaltext;
            if(editText.getText().length()>0) {
                finaltext = editText.getText().toString() + " " + speakingResult.get(0);
            } else {
                finaltext=speakingResult.get(0);
            }
            editText.setText(finaltext);

        }
    }

Hier wird jetzt das RESULT_OK in der ersten if-abfrage nicht mehr erkannt. Davor, als es ich die Activitys noch nicht durch das TabLayout zusammengeführt habe hat es funktioniert.


Anmerkung: Dieser Code oben ist teil der Fragment1.class Activity. Muss der Code vllt. in die MainActivity??


MfG
Matze


PS: Schonmal Danke im Vorraus für die Hilfe!
 
Ich weiß jetzt nicht, wie dein Code aufgebaut ist (der vorhandene Code reicht nicht.) Aber ich denke, dass du mit deiner Vermutung recht hast. Ich denke, die andere Activity fängt den Request ab (das ist aber mehr raten, als wissen).
 
Also, der Wichtige teil des Codes:


MainActivity:
Code:
public class MainActivity extends AppCompatActivity{

    Toolbar toolbarMainActivity;

    ViewPager viewPager;
    TabLayout tabLayout;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        toolbarMainActivity=(Toolbar)findViewById(R.id.toolbarMainActivity);
        setSupportActionBar(toolbarMainActivity);
        toolbarMainActivity.setTitleTextColor(Color.WHITE);
        toolbarMainActivity.setDrawingCacheBackgroundColor(Color.WHITE);

        viewPager=(ViewPager)findViewById(R.id.viewPagerMainActivity);

        ViewPagerAdapter viewPagerAdapter = new ViewPagerAdapter(getSupportFragmentManager());

        viewPager.setAdapter(viewPagerAdapter);

        tabLayout=(TabLayout)findViewById(R.id.tabLayoutMainActivity);
        tabLayout.setTabGravity(TabLayout.GRAVITY_FILL);
        tabLayout.setupWithViewPager(viewPager);
        tabLayout.setTabTextColors(ColorStateList.valueOf(Color.WHITE));
        tabLayout.setSelectedTabIndicatorColor(Color.WHITE);
        tabLayout.setOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
            @Override
            public void onTabSelected(TabLayout.Tab tab) {
                viewPager.setCurrentItem(tab.getPosition());
            }

            @Override
            public void onTabUnselected(TabLayout.Tab tab) {

            }

            @Override
            public void onTabReselected(TabLayout.Tab tab) {

            }
        });
    }


    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.menu, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();

        //noinspection SimplifiableIfStatement
        if (id == R.id.action_settings) {
            startActivity(new Intent(MainActivity.this, Einstellungen.class));
            return true;
        }

        return super.onOptionsItemSelected(item);
    }

}



Fragment1:
Code:
public class Fragment1 extends Fragment implements View.OnClickListener{

    View contentView;

    EditText editText;

    FloatingActionButton fabaudio;

    final int SPEAKING_INTENT_REQUEST_CODE = 10;


    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {

        contentView=inflater.inflate(R.layout.activity_notiz_erstellen, null);


        return contentView;
    }


    @Override
    public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {

        editText = (EditText)contentView.findViewById(R.id.editText);

        btnsave=(Button)contentView.findViewById(R.id.btnsave);
        btnsave.setOnClickListener(this);

        fabaudio=(FloatingActionButton)contentView.findViewById(R.id.fabaudio);
        fabaudio.setOnClickListener(this);



        super.onViewCreated(view, savedInstanceState);
    }

    @Override
    public void onClick(View v){

        switch (v.getId()){

            case R.id.fabaudio:{
                speaking();

                break;
            }
        }
    }

    /*@Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);

        if(requestCode == SPEAKING_INTENT_REQUEST_CODE && resultCode == RESULT_OK){
            ArrayList<String> speakingResult = data.getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS);

            String finaltext;
            if(editText.getText().length()>0) {
                finaltext = editText.getText().toString() + " " + speakingResult.get(0);
            } else {
                finaltext=speakingResult.get(0);
            }
            editText.setText(finaltext);

        }
    }*/

    private void speaking(){
        Intent speakingIntent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
        speakingIntent.putExtra(RecognizerIntent.EXTRA_LANGUAGE, Locale.getDefault().toString());
        startActivityForResult(speakingIntent, SPEAKING_INTENT_REQUEST_CODE);
    }
}



ViewPagerAdapter:

Code:
public class ViewPagerAdapter extends FragmentPagerAdapter{

    String[] tabTitleArray = {"Fragment1", "Fragment2"};

    public ViewPagerAdapter(FragmentManager manager){

        super(manager);
    }


    @Override
    public Fragment getItem(int position) {

        switch (position){

            case 0: return new Fragment1();
            case 1: return new Fragment2();
        }


        return null;
    }

    @Override
    public int getCount() {
        return 2;
    }


    @Override
    public CharSequence getPageTitle(int position) {

        return tabTitleArray[position];
    }
}
 
Hallo Matze

innerhalb eines Fragments bekommst du kein gültiges ActivityResult ,
das musst du definitv in der Main machen ( da wo es auch bei dir klappt)

Ich hatte Ähnliches auch schon mal bei Login-Tokens. (z.b. Spotify)
Ich habe mir dann die Instanzen ausgetauscht , oder du kannst mit SingleTon arbeiten.

Das scheint "normal" zu sein
(Ich war dann zu faul mir den Grund zu suchen )
 
  • Danke
Reaktionen: Matze02
@swa00 Danke für die Hilfe. Werde es nachher gleich mal ausprobieren!
 
Oder du baust dir grob so etwas ;)

Code:
@Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        final Fragment frag = getSupportFragmentManager().findFragmentById(R.id.content);
        if (frag != null) {
            frag.onActivityResult(requestCode, resultCode, data);
        }

lg.
    }
 

Ähnliche Themen

D
Antworten
23
Aufrufe
2.312
Data2006
D
SaniMatthias
Antworten
19
Aufrufe
858
swa00
swa00
R
Antworten
3
Aufrufe
1.564
Ritartet
R
Zurück
Oben Unten