Я использую этот проект https://github.com/googlesamples/android-RecyclerView в качестве ссылки, чтобы узнать о RecyclerView и реализовать ответ MLProgrammer-Cim here для обработки событий onClick.Android Распознавание речи с RecyclerView
В моей 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);
и адаптер $ ViewHolder.onClick (CustomAdapter.java:287), который является ma.speakNow();
Я читал различные «методы вызова других мероприятий возвращения NPE», вопросы и ответы, не слишком уверен, как те относятся к моему делу поскольку MainActivity расширяет SampleActivityBase
, который является публичным абстрактным классом, который расширяет FragmentActivity.
Где/как мне нужно интегрировать MainActivity ma = new MainActivity(); так что это не нуль? Благодаря
Спасибо за ответ. Я уверен, что это очень полный ответ, но из-за моих ограничений я не понимаю, как передать ссылку на активность на адаптер и как установить его для запуска метода talkNow(). Не могли бы вы подробнее использовать код, который я опубликовал выше..thanks – Mcorv
ok, понял, что означало u, означает снова! – Mcorv