尝试在空对象引用上调用虚方法 'android.content.res.Resources android.content.Context.getResources()' 什么问题
Attempt to invoke virtual method 'android.content.res.Resources android.content.Context.getResources()' on a null object reference whate problem
我想运行点击项目时发出声音但点击项目时显示错误
图片和文字正确但点击项目播放声音报错
照片和 cobe 编号 48 中的鞋子错误吗
我想运行点击项目时发出声音但点击项目时显示错误
图片和文字正确但点击项目播放声音报错
照片和 cobe 编号 48 中的鞋子错误吗
BabListAdapter
package com.example.learnn.ui;
import android.content.Context;
import android.media.MediaPlayer;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
import com.example.learnn.EnglishlettersActivity;
import com.example.learnn.R;
import java.util.ArrayList;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
public class BabyListAdapter extends RecyclerView.Adapter<BabyListAdapter.BabyViewHolder> {
private MediaPlayer mMediaPlayer;
Context context;
private ArrayList<BabyModel> letterList = new ArrayList<>();
public BabyListAdapter() {
this.context = context;
}
@NonNull
@Override
public BabyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
return new BabyViewHolder(LayoutInflater.from(parent.getContext()).inflate(R.layout.litter_list_item, parent, false));
}
@Override
public void onBindViewHolder(@NonNull BabyViewHolder holder, final int position) {
holder.image.setImageResource(letterList.get(position).getLetterRecourceID());
holder.text.setText (letterList.get(position).getDefaultText());
holder.part.setOnClickListener ( new View.OnClickListener () {
@Override
public void onClick(View v) {
mMediaPlayer = MediaPlayer.create ( context,letterList.get ( position ).getAudioResourceId () );
mMediaPlayer.start();
}
} );
}
@Override
public int getItemCount() {
return letterList.size();
}
public void setList(ArrayList<BabyModel> letterList) {
this.letterList = letterList;
notifyDataSetChanged();
}
public class BabyViewHolder extends RecyclerView.ViewHolder {
ImageView image;
TextView text;
LinearLayout part;
public BabyViewHolder(@NonNull View itemView) {
super(itemView);
image = itemView.findViewById(R.id.imagee);
text = itemView.findViewById(R.id.text);
part = itemView.findViewById(R.id.part);
}
}
}
EnglishLetterActivity
package com.example.learnn;
import androidx.appcompat.app.AppCompatActivity;
import androidx.databinding.DataBindingUtil;
import androidx.lifecycle.Observer;
import androidx.lifecycle.ViewModelProviders;
import androidx.recyclerview.widget.GridLayoutManager;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import android.content.Context;
import android.graphics.drawable.Drawable;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ImageView;
import android.widget.TextView;
import com.example.learnn.databinding.ActivityEnglishcolorsBinding;
import com.example.learnn.databinding.ActivityEnglishlettersBinding;
import com.example.learnn.ui.BabyListAdapter;
import com.example.learnn.ui.BabyModel;
import com.example.learnn.ui.BabyViewModel;
import java.util.ArrayList;
public class EnglishlettersActivity extends AppCompatActivity {
BabyViewModel babyViewModel;
ImageView imagee,next;
RecyclerView recycler;
private int index = 0;
private MediaPlayer mMediaPlayer;
ArrayList arrayList,letterList;
Context context;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
ActivityEnglishlettersBinding binding = DataBindingUtil.setContentView(this, R.layout.activity_englishletters);
imagee = (ImageView)findViewById(R.id.imagee);
recycler = (RecyclerView)findViewById(R.id.recycler);
final BabyListAdapter adapter = new BabyListAdapter();
recycler.setAdapter(adapter);
GridLayoutManager layoutManager = new GridLayoutManager ( this, 3 );
recycler.setLayoutManager(layoutManager);
babyViewModel = ViewModelProviders.of(this).get(BabyViewModel.class);
babyViewModel.letterRecourceIDMutableLiveData.observe(this, new Observer<ArrayList<BabyModel>>() {
@Override
public void onChanged(ArrayList<BabyModel> babyModels) {
adapter.setList(babyModels);
}
});
babyViewModel.getLetterRecourceID();
}
}
BabyViewModel
package com.example.learnn.ui;
import com.example.learnn.R;
import java.util.ArrayList;
import androidx.lifecycle.MutableLiveData;
import androidx.lifecycle.ViewModel;
public class BabyViewModel extends ViewModel {
ArrayList arrayList;
public MutableLiveData<ArrayList<BabyModel>> letterRecourceIDMutableLiveData = new MutableLiveData<>();
public MutableLiveData<ArrayList<BabyModel>> defaultTextMutableLiveData = new MutableLiveData<>();
public MutableLiveData<ArrayList<BabyModel>> audioResourceIdMutableLiveData = new MutableLiveData<>();
public void getLetterRecourceID(){
letterRecourceIDMutableLiveData.setValue(getDataFromDatabase());
}
public void getDefaultText(){
defaultTextMutableLiveData.setValue(getDataFromDatabase());
}
public void getAudioResourceId(){
audioResourceIdMutableLiveData.setValue(getDataFromDatabase());
}
private ArrayList<BabyModel> getDataFromDatabase(){
ArrayList<BabyModel> arrayList = new ArrayList<>();
arrayList.add(new BabyModel(R.drawable.a, "A",R.raw.a));
arrayList.add(new BabyModel(R.drawable.b,"B",R.raw.b));
arrayList.add(new BabyModel(R.drawable.c,"D",R.raw.c));
arrayList.add(new BabyModel(R.drawable.d,"D",R.raw.d));
arrayList.add(new BabyModel(R.drawable.e,"E",R.raw.e));
arrayList.add(new BabyModel(R.drawable.f,"F",R.raw.f));
arrayList.add(new BabyModel(R.drawable.g,"G",R.raw.g));
arrayList.add(new BabyModel(R.drawable.h,"H",R.raw.h));
arrayList.add(new BabyModel(R.drawable.i,"I",R.raw.i));
arrayList.add(new BabyModel(R.drawable.j,"J",R.raw.j));
arrayList.add(new BabyModel(R.drawable.k,"K",R.raw.k));
arrayList.add(new BabyModel(R.drawable.l,"L",R.raw.l));
arrayList.add(new BabyModel(R.drawable.m,"M",R.raw.m));
arrayList.add(new BabyModel(R.drawable.o,"O",R.raw.o));
arrayList.add(new BabyModel(R.drawable.p,"P",R.raw.p));
arrayList.add(new BabyModel(R.drawable.q,"G",R.raw.g));
arrayList.add(new BabyModel(R.drawable.r,"R",R.raw.r));
arrayList.add(new BabyModel(R.drawable.s,"S",R.raw.s));
arrayList.add(new BabyModel(R.drawable.t,"T",R.raw.t));
arrayList.add(new BabyModel(R.drawable.u,"U",R.raw.u));
arrayList.add(new BabyModel(R.drawable.v,"U",R.raw.u));
arrayList.add(new BabyModel(R.drawable.e,"E",R.raw.e));
arrayList.add(new BabyModel(R.drawable.w,"W",R.raw.w));
arrayList.add(new BabyModel(R.drawable.x,"X",R.raw.x));
arrayList.add(new BabyModel(R.drawable.y,"Y",R.raw.y));
arrayList.add(new BabyModel(R.drawable.z,"Z",R.raw.z));
return arrayList;
}
}
listlitteritem
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
>
<data>
</data>
<FrameLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<LinearLayout
android:id="@+id/part"
android:orientation="vertical"
android:background="@drawable/letter_style"
android:layout_margin="5dp"
android:layout_width="120dp"
android:layout_height="150dp">
<ImageView
android:gravity="center"
android:id="@+id/imagee"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="5"
android:layout_marginTop="15dp"
android:layout_marginRight="15dp"
android:layout_marginLeft="15dp"
tools:context=".EnglishlettersActivity" />
<TextView
android:gravity="center_horizontal"
android:id="@+id/text"
android:textSize="20sp"
android:textStyle="bold"
android:textColor="#141414"
android:text="ddfdfdfdf"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:layout_marginBottom="10dp"
/>
</LinearLayout>
</FrameLayout>
</layout>
BabListAdapter
package com.example.learnn.ui;
import android.content.Context;
import android.media.MediaPlayer;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
import com.example.learnn.EnglishlettersActivity;
import com.example.learnn.R;
import java.util.ArrayList;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
public class BabyListAdapter extends RecyclerView.Adapter<BabyListAdapter.BabyViewHolder> {
private MediaPlayer mMediaPlayer;
Context context;
private ArrayList<BabyModel> letterList = new ArrayList<>();
public BabyListAdapter() {
this.context = context;
}
@NonNull
@Override
public BabyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
return new BabyViewHolder(LayoutInflater.from(parent.getContext()).inflate(R.layout.litter_list_item, parent, false));
}
@Override
public void onBindViewHolder(@NonNull BabyViewHolder holder, final int position) {
holder.image.setImageResource(letterList.get(position).getLetterRecourceID());
holder.text.setText (letterList.get(position).getDefaultText());
holder.part.setOnClickListener ( new View.OnClickListener () {
@Override
public void onClick(View v) {
mMediaPlayer = MediaPlayer.create ( context,letterList.get ( position ).getAudioResourceId () );
mMediaPlayer.start();
}
} );
}
@Override
public int getItemCount() {
return letterList.size();
}
public void setList(ArrayList<BabyModel> letterList) {
this.letterList = letterList;
notifyDataSetChanged();
}
public class BabyViewHolder extends RecyclerView.ViewHolder {
ImageView image;
TextView text;
LinearLayout part;
public BabyViewHolder(@NonNull View itemView) {
super(itemView);
image = itemView.findViewById(R.id.imagee);
text = itemView.findViewById(R.id.text);
part = itemView.findViewById(R.id.part);
}
}
}
EnglishLetterActivity
package com.example.learnn;
import androidx.appcompat.app.AppCompatActivity;
import androidx.databinding.DataBindingUtil;
import androidx.lifecycle.Observer;
import androidx.lifecycle.ViewModelProviders;
import androidx.recyclerview.widget.GridLayoutManager;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import android.content.Context;
import android.graphics.drawable.Drawable;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ImageView;
import android.widget.TextView;
import com.example.learnn.databinding.ActivityEnglishcolorsBinding;
import com.example.learnn.databinding.ActivityEnglishlettersBinding;
import com.example.learnn.ui.BabyListAdapter;
import com.example.learnn.ui.BabyModel;
import com.example.learnn.ui.BabyViewModel;
import java.util.ArrayList;
public class EnglishlettersActivity extends AppCompatActivity {
BabyViewModel babyViewModel;
ImageView imagee,next;
RecyclerView recycler;
private int index = 0;
private MediaPlayer mMediaPlayer;
ArrayList arrayList,letterList;
Context context;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
ActivityEnglishlettersBinding binding = DataBindingUtil.setContentView(this, R.layout.activity_englishletters);
imagee = (ImageView)findViewById(R.id.imagee);
recycler = (RecyclerView)findViewById(R.id.recycler);
final BabyListAdapter adapter = new BabyListAdapter();
recycler.setAdapter(adapter);
GridLayoutManager layoutManager = new GridLayoutManager ( this, 3 );
recycler.setLayoutManager(layoutManager);
babyViewModel = ViewModelProviders.of(this).get(BabyViewModel.class);
babyViewModel.letterRecourceIDMutableLiveData.observe(this, new Observer<ArrayList<BabyModel>>() {
@Override
public void onChanged(ArrayList<BabyModel> babyModels) {
adapter.setList(babyModels);
}
});
babyViewModel.getLetterRecourceID();
}
}
BabyViewModel
package com.example.learnn.ui;
import com.example.learnn.R;
import java.util.ArrayList;
import androidx.lifecycle.MutableLiveData;
import androidx.lifecycle.ViewModel;
public class BabyViewModel extends ViewModel {
ArrayList arrayList;
public MutableLiveData<ArrayList<BabyModel>> letterRecourceIDMutableLiveData = new MutableLiveData<>();
public MutableLiveData<ArrayList<BabyModel>> defaultTextMutableLiveData = new MutableLiveData<>();
public MutableLiveData<ArrayList<BabyModel>> audioResourceIdMutableLiveData = new MutableLiveData<>();
public void getLetterRecourceID(){
letterRecourceIDMutableLiveData.setValue(getDataFromDatabase());
}
public void getDefaultText(){
defaultTextMutableLiveData.setValue(getDataFromDatabase());
}
public void getAudioResourceId(){
audioResourceIdMutableLiveData.setValue(getDataFromDatabase());
}
private ArrayList<BabyModel> getDataFromDatabase(){
ArrayList<BabyModel> arrayList = new ArrayList<>();
arrayList.add(new BabyModel(R.drawable.a, "A",R.raw.a));
arrayList.add(new BabyModel(R.drawable.b,"B",R.raw.b));
arrayList.add(new BabyModel(R.drawable.c,"D",R.raw.c));
arrayList.add(new BabyModel(R.drawable.d,"D",R.raw.d));
arrayList.add(new BabyModel(R.drawable.e,"E",R.raw.e));
arrayList.add(new BabyModel(R.drawable.f,"F",R.raw.f));
arrayList.add(new BabyModel(R.drawable.g,"G",R.raw.g));
arrayList.add(new BabyModel(R.drawable.h,"H",R.raw.h));
arrayList.add(new BabyModel(R.drawable.i,"I",R.raw.i));
arrayList.add(new BabyModel(R.drawable.j,"J",R.raw.j));
arrayList.add(new BabyModel(R.drawable.k,"K",R.raw.k));
arrayList.add(new BabyModel(R.drawable.l,"L",R.raw.l));
arrayList.add(new BabyModel(R.drawable.m,"M",R.raw.m));
arrayList.add(new BabyModel(R.drawable.o,"O",R.raw.o));
arrayList.add(new BabyModel(R.drawable.p,"P",R.raw.p));
arrayList.add(new BabyModel(R.drawable.q,"G",R.raw.g));
arrayList.add(new BabyModel(R.drawable.r,"R",R.raw.r));
arrayList.add(new BabyModel(R.drawable.s,"S",R.raw.s));
arrayList.add(new BabyModel(R.drawable.t,"T",R.raw.t));
arrayList.add(new BabyModel(R.drawable.u,"U",R.raw.u));
arrayList.add(new BabyModel(R.drawable.v,"U",R.raw.u));
arrayList.add(new BabyModel(R.drawable.e,"E",R.raw.e));
arrayList.add(new BabyModel(R.drawable.w,"W",R.raw.w));
arrayList.add(new BabyModel(R.drawable.x,"X",R.raw.x));
arrayList.add(new BabyModel(R.drawable.y,"Y",R.raw.y));
arrayList.add(new BabyModel(R.drawable.z,"Z",R.raw.z));
return arrayList;
}
}
listlitteritem
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
>
<data>
</data>
<FrameLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<LinearLayout
android:id="@+id/part"
android:orientation="vertical"
android:background="@drawable/letter_style"
android:layout_margin="5dp"
android:layout_width="120dp"
android:layout_height="150dp">
<ImageView
android:gravity="center"
android:id="@+id/imagee"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="5"
android:layout_marginTop="15dp"
android:layout_marginRight="15dp"
android:layout_marginLeft="15dp"
tools:context=".EnglishlettersActivity" />
<TextView
android:gravity="center_horizontal"
android:id="@+id/text"
android:textSize="20sp"
android:textStyle="bold"
android:textColor="#141414"
android:text="ddfdfdfdf"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:layout_marginBottom="10dp"
/>
</LinearLayout>
</FrameLayout>
</layout>
在您的适配器中所做的更改
public BabyListAdapter(Context context) {
this.context = context;
}
在你的activity
BabyListAdapter adapter = new BabyListAdapter(EnglishlettersActivity.this);
尝试从 View v
获取上下文,如下所示
mMediaPlayer = MediaPlayer.create ( v.getContext(),letterList.get ( position ).getAudioResourceId () );
而不是
mMediaPlayer = MediaPlayer.create ( context,letterList.get ( position ).getAudioResourceId () );
我想运行点击项目时发出声音但点击项目时显示错误 图片和文字正确但点击项目播放声音报错 照片和 cobe 编号 48 中的鞋子错误吗
我想运行点击项目时发出声音但点击项目时显示错误 图片和文字正确但点击项目播放声音报错 照片和 cobe 编号 48 中的鞋子错误吗
BabListAdapter
package com.example.learnn.ui;
import android.content.Context;
import android.media.MediaPlayer;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
import com.example.learnn.EnglishlettersActivity;
import com.example.learnn.R;
import java.util.ArrayList;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
public class BabyListAdapter extends RecyclerView.Adapter<BabyListAdapter.BabyViewHolder> {
private MediaPlayer mMediaPlayer;
Context context;
private ArrayList<BabyModel> letterList = new ArrayList<>();
public BabyListAdapter() {
this.context = context;
}
@NonNull
@Override
public BabyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
return new BabyViewHolder(LayoutInflater.from(parent.getContext()).inflate(R.layout.litter_list_item, parent, false));
}
@Override
public void onBindViewHolder(@NonNull BabyViewHolder holder, final int position) {
holder.image.setImageResource(letterList.get(position).getLetterRecourceID());
holder.text.setText (letterList.get(position).getDefaultText());
holder.part.setOnClickListener ( new View.OnClickListener () {
@Override
public void onClick(View v) {
mMediaPlayer = MediaPlayer.create ( context,letterList.get ( position ).getAudioResourceId () );
mMediaPlayer.start();
}
} );
}
@Override
public int getItemCount() {
return letterList.size();
}
public void setList(ArrayList<BabyModel> letterList) {
this.letterList = letterList;
notifyDataSetChanged();
}
public class BabyViewHolder extends RecyclerView.ViewHolder {
ImageView image;
TextView text;
LinearLayout part;
public BabyViewHolder(@NonNull View itemView) {
super(itemView);
image = itemView.findViewById(R.id.imagee);
text = itemView.findViewById(R.id.text);
part = itemView.findViewById(R.id.part);
}
}
}
EnglishLetterActivity
package com.example.learnn;
import androidx.appcompat.app.AppCompatActivity;
import androidx.databinding.DataBindingUtil;
import androidx.lifecycle.Observer;
import androidx.lifecycle.ViewModelProviders;
import androidx.recyclerview.widget.GridLayoutManager;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import android.content.Context;
import android.graphics.drawable.Drawable;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ImageView;
import android.widget.TextView;
import com.example.learnn.databinding.ActivityEnglishcolorsBinding;
import com.example.learnn.databinding.ActivityEnglishlettersBinding;
import com.example.learnn.ui.BabyListAdapter;
import com.example.learnn.ui.BabyModel;
import com.example.learnn.ui.BabyViewModel;
import java.util.ArrayList;
public class EnglishlettersActivity extends AppCompatActivity {
BabyViewModel babyViewModel;
ImageView imagee,next;
RecyclerView recycler;
private int index = 0;
private MediaPlayer mMediaPlayer;
ArrayList arrayList,letterList;
Context context;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
ActivityEnglishlettersBinding binding = DataBindingUtil.setContentView(this, R.layout.activity_englishletters);
imagee = (ImageView)findViewById(R.id.imagee);
recycler = (RecyclerView)findViewById(R.id.recycler);
final BabyListAdapter adapter = new BabyListAdapter();
recycler.setAdapter(adapter);
GridLayoutManager layoutManager = new GridLayoutManager ( this, 3 );
recycler.setLayoutManager(layoutManager);
babyViewModel = ViewModelProviders.of(this).get(BabyViewModel.class);
babyViewModel.letterRecourceIDMutableLiveData.observe(this, new Observer<ArrayList<BabyModel>>() {
@Override
public void onChanged(ArrayList<BabyModel> babyModels) {
adapter.setList(babyModels);
}
});
babyViewModel.getLetterRecourceID();
}
}
BabyViewModel
package com.example.learnn.ui;
import com.example.learnn.R;
import java.util.ArrayList;
import androidx.lifecycle.MutableLiveData;
import androidx.lifecycle.ViewModel;
public class BabyViewModel extends ViewModel {
ArrayList arrayList;
public MutableLiveData<ArrayList<BabyModel>> letterRecourceIDMutableLiveData = new MutableLiveData<>();
public MutableLiveData<ArrayList<BabyModel>> defaultTextMutableLiveData = new MutableLiveData<>();
public MutableLiveData<ArrayList<BabyModel>> audioResourceIdMutableLiveData = new MutableLiveData<>();
public void getLetterRecourceID(){
letterRecourceIDMutableLiveData.setValue(getDataFromDatabase());
}
public void getDefaultText(){
defaultTextMutableLiveData.setValue(getDataFromDatabase());
}
public void getAudioResourceId(){
audioResourceIdMutableLiveData.setValue(getDataFromDatabase());
}
private ArrayList<BabyModel> getDataFromDatabase(){
ArrayList<BabyModel> arrayList = new ArrayList<>();
arrayList.add(new BabyModel(R.drawable.a, "A",R.raw.a));
arrayList.add(new BabyModel(R.drawable.b,"B",R.raw.b));
arrayList.add(new BabyModel(R.drawable.c,"D",R.raw.c));
arrayList.add(new BabyModel(R.drawable.d,"D",R.raw.d));
arrayList.add(new BabyModel(R.drawable.e,"E",R.raw.e));
arrayList.add(new BabyModel(R.drawable.f,"F",R.raw.f));
arrayList.add(new BabyModel(R.drawable.g,"G",R.raw.g));
arrayList.add(new BabyModel(R.drawable.h,"H",R.raw.h));
arrayList.add(new BabyModel(R.drawable.i,"I",R.raw.i));
arrayList.add(new BabyModel(R.drawable.j,"J",R.raw.j));
arrayList.add(new BabyModel(R.drawable.k,"K",R.raw.k));
arrayList.add(new BabyModel(R.drawable.l,"L",R.raw.l));
arrayList.add(new BabyModel(R.drawable.m,"M",R.raw.m));
arrayList.add(new BabyModel(R.drawable.o,"O",R.raw.o));
arrayList.add(new BabyModel(R.drawable.p,"P",R.raw.p));
arrayList.add(new BabyModel(R.drawable.q,"G",R.raw.g));
arrayList.add(new BabyModel(R.drawable.r,"R",R.raw.r));
arrayList.add(new BabyModel(R.drawable.s,"S",R.raw.s));
arrayList.add(new BabyModel(R.drawable.t,"T",R.raw.t));
arrayList.add(new BabyModel(R.drawable.u,"U",R.raw.u));
arrayList.add(new BabyModel(R.drawable.v,"U",R.raw.u));
arrayList.add(new BabyModel(R.drawable.e,"E",R.raw.e));
arrayList.add(new BabyModel(R.drawable.w,"W",R.raw.w));
arrayList.add(new BabyModel(R.drawable.x,"X",R.raw.x));
arrayList.add(new BabyModel(R.drawable.y,"Y",R.raw.y));
arrayList.add(new BabyModel(R.drawable.z,"Z",R.raw.z));
return arrayList;
}
}
listlitteritem
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
>
<data>
</data>
<FrameLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<LinearLayout
android:id="@+id/part"
android:orientation="vertical"
android:background="@drawable/letter_style"
android:layout_margin="5dp"
android:layout_width="120dp"
android:layout_height="150dp">
<ImageView
android:gravity="center"
android:id="@+id/imagee"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="5"
android:layout_marginTop="15dp"
android:layout_marginRight="15dp"
android:layout_marginLeft="15dp"
tools:context=".EnglishlettersActivity" />
<TextView
android:gravity="center_horizontal"
android:id="@+id/text"
android:textSize="20sp"
android:textStyle="bold"
android:textColor="#141414"
android:text="ddfdfdfdf"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:layout_marginBottom="10dp"
/>
</LinearLayout>
</FrameLayout>
</layout>
BabListAdapter
package com.example.learnn.ui;
import android.content.Context;
import android.media.MediaPlayer;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
import com.example.learnn.EnglishlettersActivity;
import com.example.learnn.R;
import java.util.ArrayList;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
public class BabyListAdapter extends RecyclerView.Adapter<BabyListAdapter.BabyViewHolder> {
private MediaPlayer mMediaPlayer;
Context context;
private ArrayList<BabyModel> letterList = new ArrayList<>();
public BabyListAdapter() {
this.context = context;
}
@NonNull
@Override
public BabyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
return new BabyViewHolder(LayoutInflater.from(parent.getContext()).inflate(R.layout.litter_list_item, parent, false));
}
@Override
public void onBindViewHolder(@NonNull BabyViewHolder holder, final int position) {
holder.image.setImageResource(letterList.get(position).getLetterRecourceID());
holder.text.setText (letterList.get(position).getDefaultText());
holder.part.setOnClickListener ( new View.OnClickListener () {
@Override
public void onClick(View v) {
mMediaPlayer = MediaPlayer.create ( context,letterList.get ( position ).getAudioResourceId () );
mMediaPlayer.start();
}
} );
}
@Override
public int getItemCount() {
return letterList.size();
}
public void setList(ArrayList<BabyModel> letterList) {
this.letterList = letterList;
notifyDataSetChanged();
}
public class BabyViewHolder extends RecyclerView.ViewHolder {
ImageView image;
TextView text;
LinearLayout part;
public BabyViewHolder(@NonNull View itemView) {
super(itemView);
image = itemView.findViewById(R.id.imagee);
text = itemView.findViewById(R.id.text);
part = itemView.findViewById(R.id.part);
}
}
}
EnglishLetterActivity
package com.example.learnn;
import androidx.appcompat.app.AppCompatActivity;
import androidx.databinding.DataBindingUtil;
import androidx.lifecycle.Observer;
import androidx.lifecycle.ViewModelProviders;
import androidx.recyclerview.widget.GridLayoutManager;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import android.content.Context;
import android.graphics.drawable.Drawable;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ImageView;
import android.widget.TextView;
import com.example.learnn.databinding.ActivityEnglishcolorsBinding;
import com.example.learnn.databinding.ActivityEnglishlettersBinding;
import com.example.learnn.ui.BabyListAdapter;
import com.example.learnn.ui.BabyModel;
import com.example.learnn.ui.BabyViewModel;
import java.util.ArrayList;
public class EnglishlettersActivity extends AppCompatActivity {
BabyViewModel babyViewModel;
ImageView imagee,next;
RecyclerView recycler;
private int index = 0;
private MediaPlayer mMediaPlayer;
ArrayList arrayList,letterList;
Context context;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
ActivityEnglishlettersBinding binding = DataBindingUtil.setContentView(this, R.layout.activity_englishletters);
imagee = (ImageView)findViewById(R.id.imagee);
recycler = (RecyclerView)findViewById(R.id.recycler);
final BabyListAdapter adapter = new BabyListAdapter();
recycler.setAdapter(adapter);
GridLayoutManager layoutManager = new GridLayoutManager ( this, 3 );
recycler.setLayoutManager(layoutManager);
babyViewModel = ViewModelProviders.of(this).get(BabyViewModel.class);
babyViewModel.letterRecourceIDMutableLiveData.observe(this, new Observer<ArrayList<BabyModel>>() {
@Override
public void onChanged(ArrayList<BabyModel> babyModels) {
adapter.setList(babyModels);
}
});
babyViewModel.getLetterRecourceID();
}
}
BabyViewModel
package com.example.learnn.ui;
import com.example.learnn.R;
import java.util.ArrayList;
import androidx.lifecycle.MutableLiveData;
import androidx.lifecycle.ViewModel;
public class BabyViewModel extends ViewModel {
ArrayList arrayList;
public MutableLiveData<ArrayList<BabyModel>> letterRecourceIDMutableLiveData = new MutableLiveData<>();
public MutableLiveData<ArrayList<BabyModel>> defaultTextMutableLiveData = new MutableLiveData<>();
public MutableLiveData<ArrayList<BabyModel>> audioResourceIdMutableLiveData = new MutableLiveData<>();
public void getLetterRecourceID(){
letterRecourceIDMutableLiveData.setValue(getDataFromDatabase());
}
public void getDefaultText(){
defaultTextMutableLiveData.setValue(getDataFromDatabase());
}
public void getAudioResourceId(){
audioResourceIdMutableLiveData.setValue(getDataFromDatabase());
}
private ArrayList<BabyModel> getDataFromDatabase(){
ArrayList<BabyModel> arrayList = new ArrayList<>();
arrayList.add(new BabyModel(R.drawable.a, "A",R.raw.a));
arrayList.add(new BabyModel(R.drawable.b,"B",R.raw.b));
arrayList.add(new BabyModel(R.drawable.c,"D",R.raw.c));
arrayList.add(new BabyModel(R.drawable.d,"D",R.raw.d));
arrayList.add(new BabyModel(R.drawable.e,"E",R.raw.e));
arrayList.add(new BabyModel(R.drawable.f,"F",R.raw.f));
arrayList.add(new BabyModel(R.drawable.g,"G",R.raw.g));
arrayList.add(new BabyModel(R.drawable.h,"H",R.raw.h));
arrayList.add(new BabyModel(R.drawable.i,"I",R.raw.i));
arrayList.add(new BabyModel(R.drawable.j,"J",R.raw.j));
arrayList.add(new BabyModel(R.drawable.k,"K",R.raw.k));
arrayList.add(new BabyModel(R.drawable.l,"L",R.raw.l));
arrayList.add(new BabyModel(R.drawable.m,"M",R.raw.m));
arrayList.add(new BabyModel(R.drawable.o,"O",R.raw.o));
arrayList.add(new BabyModel(R.drawable.p,"P",R.raw.p));
arrayList.add(new BabyModel(R.drawable.q,"G",R.raw.g));
arrayList.add(new BabyModel(R.drawable.r,"R",R.raw.r));
arrayList.add(new BabyModel(R.drawable.s,"S",R.raw.s));
arrayList.add(new BabyModel(R.drawable.t,"T",R.raw.t));
arrayList.add(new BabyModel(R.drawable.u,"U",R.raw.u));
arrayList.add(new BabyModel(R.drawable.v,"U",R.raw.u));
arrayList.add(new BabyModel(R.drawable.e,"E",R.raw.e));
arrayList.add(new BabyModel(R.drawable.w,"W",R.raw.w));
arrayList.add(new BabyModel(R.drawable.x,"X",R.raw.x));
arrayList.add(new BabyModel(R.drawable.y,"Y",R.raw.y));
arrayList.add(new BabyModel(R.drawable.z,"Z",R.raw.z));
return arrayList;
}
}
listlitteritem
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
>
<data>
</data>
<FrameLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<LinearLayout
android:id="@+id/part"
android:orientation="vertical"
android:background="@drawable/letter_style"
android:layout_margin="5dp"
android:layout_width="120dp"
android:layout_height="150dp">
<ImageView
android:gravity="center"
android:id="@+id/imagee"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="5"
android:layout_marginTop="15dp"
android:layout_marginRight="15dp"
android:layout_marginLeft="15dp"
tools:context=".EnglishlettersActivity" />
<TextView
android:gravity="center_horizontal"
android:id="@+id/text"
android:textSize="20sp"
android:textStyle="bold"
android:textColor="#141414"
android:text="ddfdfdfdf"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:layout_marginBottom="10dp"
/>
</LinearLayout>
</FrameLayout>
</layout>
在您的适配器中所做的更改
public BabyListAdapter(Context context) {
this.context = context;
}
在你的activity
BabyListAdapter adapter = new BabyListAdapter(EnglishlettersActivity.this);
尝试从 View v
获取上下文,如下所示
mMediaPlayer = MediaPlayer.create ( v.getContext(),letterList.get ( position ).getAudioResourceId () );
而不是
mMediaPlayer = MediaPlayer.create ( context,letterList.get ( position ).getAudioResourceId () );