NumbersActivity.java
import androidx.appcompat.app.AppCompatActivity;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;
import java.util.ArrayList;
public class NumbersActivity extends AppCompatActivity {
private MediaPlayer mMediaPlayer;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_numbers);
ArrayList<Word> words= new ArrayList<>();
//words.add("zero");
words.add(new Word("one","lutti",R.drawable.number_one));
words.add(new Word("two","otiiko",R.drawable.number_two));
words.add(new Word("three","tolookosu",R.drawable.number_three));
words.add(new Word("four","oyyisa",R.drawable.number_four));
words.add(new Word("five","massokka",R.drawable.number_five));
words.add(new Word("six","temmokka",R.drawable.number_six));
words.add(new Word("seven","kenekaku",R.drawable.number_seven));
words.add(new Word("eight","kawinta",R.drawable.number_eight));
words.add(new Word("nine","wo'e",R.drawable.number_nine));
words.add(new Word("ten","na'aacha",R.drawable.number_ten));
WordAdapter itemsAdapter = new WordAdapter(this, words,R.color.category_numbers);
ListView listView = (ListView) findViewById(R.id.list);
listView.setAdapter(itemsAdapter);
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
mMediaPlayer = MediaPlayer.create(NumbersActivity.this, R.raw.number_one);
mMediaPlayer.start(); }
});
}
}
WordAdapter.java
import android.app.Activity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ImageView;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.core.content.ContextCompat;
import java.util.ArrayList;
//To override getView method from array adapter click on
//Code>>Override Method >> getView
/**
* {@link WordAdapter} is an {@link ArrayAdapter} that can provide the layout for each list item
* based on a data source, which is a list of {@link Word} objects.
*/
public class WordAdapter extends ArrayAdapter<Word>{
/**Resource ID for the background color for this list of words*/
private int mColorResourceId;
/**
* Create a new {@link WordAdapter} object.
*
* @param context is the current context (i.e. Activity) that the adapter is being created in.
* @param words is the list of {@link Word}s to be displayed.
*/
public WordAdapter(Activity context, ArrayList<Word> words,int colorResourceId){
super(context,0,words);
mColorResourceId = colorResourceId;
}
@NonNull
@Override
public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) {
// Check if an existing view is being reused, otherwise inflate the view
View listItemView = convertView;
if(listItemView == null){
listItemView = LayoutInflater.from(getContext()).inflate(
R.layout.list_item, parent, false);
}
// Get the {@link Word} object located at this position in the list
Word currentWord = getItem(position);
// Find the TextView in the list_item.xml layout with the ID miwok_text_view.
TextView miwokTextView = (TextView) listItemView.findViewById(R.id.miwok_text_view);
// Get the Miwok translation from the currentWord object and set this text on
// the Miwok TextView.
miwokTextView.setText(currentWord.getMiwokTranslation());
// Find the TextView in the list_item.xml layout with the ID default_text_view.
TextView defaultTextView = (TextView) listItemView.findViewById(R.id.default_text_view);
// Get the default translation from the currentWord object and set this text on
// the default TextView.
defaultTextView.setText(currentWord.getDefaultTranslation());
// Find the ImageView in the list_item.xml layout with the ID image.
ImageView imageView = listItemView.findViewById(R.id.text_icon);
// Check if an image is provided for this word or not
if(currentWord.hasImage()) {
// If an image is available, display the provided image based on the resource ID
imageView.setImageResource(currentWord.getImageResourceId());
// Make sure the view is visible
imageView.setVisibility(View.VISIBLE);
}
else{
// Otherwise hide the ImageView (set visibility to GONE)
imageView.setVisibility(View.GONE);
}
//Set the theme color for the list item
View textContainer = listItemView.findViewById(R.id.text_container);
//Find the color that the resource ID maps to
int color = ContextCompat.getColor(getContext(),mColorResourceId);
//Set the background color of the text container View
textContainer.setBackgroundColor(color);
// Return the whole list item layout (containing 2 TextViews) so that it can be shown in
// the ListView.
return listItemView;
}
}
list_item.xml
<?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:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:minHeight="@dimen/list_item_height"
android:background="@color/tan_background" >
<ImageView
android:id="@+id/text_icon"
android:layout_width="@dimen/list_item_height"
android:layout_height="@dimen/list_item_height" />
<LinearLayout
android:id="@+id/text_container"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:padding="16dp"
android:layout_toRightOf="@id/text_icon">
<TextView
android:id="@+id/miwok_text_view"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:gravity="bottom"
android:textAppearance="?android:textAppearanceMedium"
android:textColor="@android:color/white"
android:textStyle="bold"
tools:text="lutti"/>
<TextView
android:id="@+id/default_text_view"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:gravity="top"
android:textAppearance="?android:textAppearanceMedium"
android:textColor="@android:color/white"
tools:text="one"/>
</LinearLayout>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="PLAY"/>
</LinearLayout>
ListView 上的 setOnClickListener 方法没有播放任何媒体文件,也没有在尝试这样做时显示任何 toast 消息。一旦单击列表项,它应该播放相同的媒体 mp3 文件。我无法识别代码编译成功的问题。创建了一个名为 wordAdapter 的自定义数组适配器。