使用RecyclerView的Android语音识别

麦科夫

我正在使用该项目https://github.com/googlesamples/android-RecyclerView作为参考来了解RecyclerView,并在这里实现MLProgrammer-Cim的答案来处理onClick事件。

在我的CustomAdapter活动中,我试图启动speakNow();另一个活动中的方法MainActivity

public class CustomAdapter extends RecyclerView.Adapter<CustomAdapter.ViewHolder> {
private static final String TAG = "CustomAdapter";
...

public static class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
    ...
    public MyViewHolderClicks mListener;
    private Context context;
    MainActivity ma = new MainActivity();

//        FragmentTransaction ft =     ((FragmentActivity)context).getSupportFragmentManager().beginTransaction();
//        SampleActivityBase fragment = (SampleActivityBase)ft.findFragmentByTag("SampleActivityBase");


    public ViewHolder(View myv, MyViewHolderClicks listener) {

        super(myv);
        mListener = listener;
        ....
        imageIcon.setOnClickListener(this);
        myv.setOnClickListener(this);
        this.context =context;


    }
    @Override
    public void onClick(View v) {
       int position = getLayoutPosition();
        if (v instanceof Button){
            mListener.onTomato((Button) v, getLayoutPosition());
            switch (v.getId()) {

               case R.id.button_for_cardview:
                   ma.speakNow();
 .....
 }
}

我的 MainActivity

public class MainActivity extends SampleActivityBase {
....
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
     ....
    //Intent intent = new Intent(getApplicationContext(),     CustomAdapter.class);
    //startActivityForResult(new Intent(this, CustomAdapter.class), checka);
    if (savedInstanceState == null) {
        FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
        RecyclerViewFragment fragment = new RecyclerViewFragment();
        transaction.replace(R.id.sample_content_fragment, fragment);
        transaction.commit();
    }
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {

  if (requestCode == checka && resultCode == RESULT_OK){
        ArrayList<String> results = data.getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS);
        lv.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, results));

       .....
        }

    }
    super.onActivityResult(requestCode, resultCode, data);


}

protected void speakNow() {
    Intent a = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
    a.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL, RecognizerIntent.LANGUAGE_MODEL_FREE_FORM);
    a.putExtra(RecognizerIntent.EXTRA_MAX_RESULTS, 6);
    a.putExtra(RecognizerIntent.EXTRA_PROMPT, GlobalVariables.getInstance().getRightAnswer1());
    startActivityForResult(a, checka);
}
....

}

这将返回一个NullPointerException以及MainActivity.speakNow(MainActivity.java:478)其中的startActivityForResult(a, checka);Adapter $ ViewHolder.onClick(CustomAdapter.java:287)ma.speakNow();

我已经阅读了各种“其他活动返回NPE的调用方法”,问题和答案,但不太确定这些方法如何适用于我的情况,因为MainActivity扩展SampleActivityBase了公共的抽象类,它扩展了FragmentActivity。

我需要在哪里/如何初始化MainActivity ma = new MainActivity(); 所以它不为空吗?谢谢

雨灰

例外情况是在startActivityForResult中引发的,这是因为您创建MainActivity ma = new MainActivity();的活动与系统创建的活动不同,您创建的活动中没有任何内容,无法读取Activity要执行的源代码startActivityForResult,它取决于某些成员变量。因此您得到了nullpoint异常。您可以在适配器中添加设置器,将Activity的引用传递给适配器

public void setActivity(Activity aty) {
    this.aty = aty;
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Android连续语音识别

来自分类Dev

Android语音识别

来自分类Dev

关于Android语音识别

来自分类Dev

如何在Ubuntu上使用Android所使用的语音识别?

来自分类Dev

如何在Ubuntu上使用Android所使用的语音识别?

来自分类Dev

Android-语音识别而非语音

来自分类Dev

无法接收使用Android语音识别超过500个结果

来自分类Dev

使用Pocketsphinx的Android连续语音识别。如何清除假设?

来自分类Dev

Android语音识别API离线

来自分类Dev

Android Google API语音识别

来自分类Dev

以语音识别模式启动Android键盘

来自分类Dev

可以离线工作的android中的语音识别

来自分类Dev

Google Android语音识别的API限制

来自分类Dev

Android特定字词语音识别

来自分类Dev

Android连续语音识别-无间隙

来自分类Dev

锁定屏幕后的Android语音识别

来自分类Dev

声音管理Android中的语音识别/ TTS

来自分类Dev

Android上的长音频语音识别

来自分类Dev

Android语音识别立即停止监听

来自分类Dev

Android-语音识别限制了收听时间

来自分类Dev

Android应用程序的语音识别

来自分类Dev

Android特定字词语音识别

来自分类Dev

语音识别-带有模板(Android Wear)

来自分类Dev

Android 服务中触发语音识别

来自分类Dev

语音识别

来自分类Dev

使用Dragonfly禁用Windows语音识别

来自分类Dev

如何从python内部使用mac的语音识别

来自分类Dev

在C ++中使用CreateProcess()启动语音识别

来自分类Dev

使用MFCC和DTW进行语音识别