效果图
activity_main
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".MainActivity">
<android.support.design.widget.TabLayout
android:id="@+id/tablayout"
style="@style/CategoryTab"
android:background="@color/primary_color"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
<android.support.v4.view.ViewPager
android:id="@+id/viewpager"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</LinearLayout>
fragment
<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.RecyclerView
android:id="@+id/recycerview"
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:drawSelectorOnTop="true">
</android.support.v7.widget.RecyclerView>
item
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:orientation="vertical"
android:layout_height="wrap_content">
<LinearLayout
android:id="@+id/layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center">
<ImageView
android:id="@+id/image"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
tools:src="@drawable/color_black" />
<TextView
tools:text="one"
android:id="@+id/text_english"
android:layout_margin="10dp"
android:textAppearance="?android:textAppearanceMedium"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"/>
<TextView
tools:text="lutti"
android:id="@+id/text_miwok"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:textAppearance="?android:textAppearanceMedium" />
<ImageView
android:id="@+id/audio"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:src="@drawable/ic_baseline_play_arrow_24px" />
</LinearLayout>
<View
android:layout_below="@id/layout"
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="#c1c1c1" />
</LinearLayout>
Word
package com.example.admin.miwok;
public class Word {
private String word_english;
private String word_miwok;
private int imageId;
private int audioId;
public Word(String word_english ,String word_miwok ,int imageId ,int audioId){
this.word_english=word_english;
this.word_miwok=word_miwok;
this.imageId=imageId;
this.audioId=audioId;
}
public String getWord_english(){
return word_english;
}
public String getWord_miwok(){
return word_miwok;
}
public int getImageId() {
return imageId;
}
public int getAudioId() {
return audioId;
}
}
MainActivity
package com.example.admin.miwok;
import android.support.design.widget.TabLayout;
import android.support.v4.view.ViewPager;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ViewPager viewPager = findViewById(R.id.viewpager);
viewPager.setAdapter(new CategoryFragmentPagerAdapter(this,getSupportFragmentManager()));
TabLayout tabLayout = findViewById(R.id.tablayout);
tabLayout.setupWithViewPager(viewPager);
}
}
mAdapter
package com.example.admin.miwok;
import android.content.Context;
import android.support.annotation.NonNull;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
import java.util.List;
public class mAdpater extends RecyclerView.Adapter<mAdpater.viewHolder> {
private Context context;
private List<Word> itemlist;
public onAudioItemClickListener onAudioItemClick;
public mAdpater(Context context,List<Word> itemlist,onAudioItemClickListener onAudioItemClick){
this.context=context;
this.itemlist=itemlist;
this.onAudioItemClick=onAudioItemClick;
}
@NonNull
@Override
public viewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
View view=LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.item,viewGroup,false);
viewHolder holder=new viewHolder(view);
return holder;
}
@Override
public void onBindViewHolder(@NonNull viewHolder viewHolder, int i) {
String word_miwok=itemlist.get(i).getWord_miwok();
String word_englist=itemlist.get(i).getWord_english();
int imageId=itemlist.get(i).getImageId();
viewHolder.textView_miwok.setText(word_miwok);
viewHolder.textView_english.setText(word_englist);
viewHolder.imageView.setImageResource(imageId);
}
@Override
public int getItemCount() {
return itemlist.size();
}
public class viewHolder extends RecyclerView.ViewHolder{
final TextView textView_miwok;
final TextView textView_english;
final ImageView imageView;
final ImageView audioView;
public viewHolder(@NonNull View itemView) {
super(itemView);
textView_miwok=itemView.findViewById(R.id.text_miwok);
textView_english=itemView.findViewById(R.id.text_english);
imageView=itemView.findViewById(R.id.image);
audioView=itemView.findViewById(R.id.audio);
audioView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
onAudioItemClick.onClick(getAdapterPosition());
}
});
}
}
public interface onAudioItemClickListener{
void onClick(int position);
}
}
NumbersFragment
package com.example.admin.miwok;
import android.content.Context;
import android.media.AudioManager;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import java.util.ArrayList;
import java.util.List;
public class NumbersFragment extends Fragment implements mAdpater.onAudioItemClickListener {
private List<Word> itemlist;
private AudioManager manager;
private MediaPlayer player;
private MediaPlayer.OnCompletionListener listener=new MediaPlayer.OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mp) {
releaseMediaPlaer();
}
};
private AudioManager.OnAudioFocusChangeListener onAudioFocusChangeListener=new AudioManager.OnAudioFocusChangeListener() {
@Override
public void onAudioFocusChange(int focusChange) {
if (focusChange==AudioManager.AUDIOFOCUS_GAIN){
player.start();
}else if (focusChange==AudioManager.AUDIOFOCUS_LOSS_TRANSIENT||focusChange==AudioManager.AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK){
player.pause();
player.seekTo(0);
}else if (focusChange==AudioManager.AUDIOFOCUS_LOSS){
releaseMediaPlaer();
}
}
};
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view=inflater.inflate(R.layout.fragment,container,false);
manager=(AudioManager) getActivity().getSystemService(Context.AUDIO_SERVICE);
itemlist=new ArrayList<Word>();
itemlist.add(new Word("one", "lutti",R.drawable.number_one, R.raw.number_one));
itemlist.add(new Word("two", "otiiko", R.drawable.number_two, R.raw.number_two));
itemlist.add(new Word("three", "tolookosu", R.drawable.number_three, R.raw.number_three));
itemlist.add(new Word("four", "oyyisa", R.drawable.number_four, R.raw.number_four));
itemlist.add(new Word("five","massokka", R.drawable.number_five, R.raw.number_five));
itemlist.add(new Word("six", "temmokka", R.drawable.number_six, R.raw.number_six));
itemlist.add(new Word("seven", "kenekaku", R.drawable.number_seven, R.raw.number_seven));
itemlist.add(new Word("eight", "kawinta", R.drawable.number_eight,R.raw.number_eight));
itemlist.add(new Word("nine", "wo'e", R.drawable.number_nine, R.raw.number_nine));
itemlist.add(new Word("ten", "na'aacha", R.drawable.number_ten, R.raw.number_ten));
RecyclerView recyclerView=view.findViewById(R.id.recycerview);
LinearLayoutManager linearLayoutManager=new LinearLayoutManager(getActivity());
recyclerView.setLayoutManager(linearLayoutManager);
mAdpater adpater=new mAdpater(getActivity(),itemlist,this);
recyclerView.setAdapter(adpater);
return view;
}
@Override
public void onClick(int position) {
releaseMediaPlaer();
int result=manager.requestAudioFocus(onAudioFocusChangeListener,AudioManager.STREAM_MUSIC,AudioManager.AUDIOFOCUS_GAIN_TRANSIENT);
if (result==AudioManager.AUDIOFOCUS_GAIN) {
player = MediaPlayer.create(getActivity(), itemlist.get(position).getAudioId());
player.start();
player.setOnCompletionListener(listener);
}
}
@Override
public void onStop() {
super.onStop();
releaseMediaPlaer();
}
private void releaseMediaPlaer() {
if (player != null) {
player.release();
player = null;
manager.abandonAudioFocus(onAudioFocusChangeListener);
}
}
}
同理,其他几个fragment复制粘贴一下就行。
CategoryFragmentPagerAdapter
package com.example.admin.miwok;
import android.content.Context;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
public class CategoryFragmentPagerAdapter extends FragmentPagerAdapter {
private Context context;
private String tabTitles[] = new String[] { "Numbers", "Family", "Colors", "Phrases" };
public CategoryFragmentPagerAdapter(Context context ,FragmentManager manager){
super(manager);
this.context=context;
}
@Override
public Fragment getItem(int position) {
if (position==0){
return new NumbersFragment();
}else if (position==1){
return new FamilyFragment();
}else if (position==2){
return new ColorsFragment();
}else {
return new PhrasesFragment();
}
}
@Override
public int getCount() {
return 4;
}
@Nullable
@Override
public CharSequence getPageTitle(int position) {
return tabTitles[position];
}
}
github项目源码: https://github.com/NeoWu55/Android-Miwok