Я не могу получить доступ к массиву изображений и аудио из функции getView (). Я прокомментировал утверждения, которые я пробовал. Эти комментарии расположены внизу кода перед классом ViewHolder.
Я пробовал использовать такие утверждения, как:
holder.imageView.setImageResource(images[position]);
holder.textView.setText(audio[position]);
Но изображения и аудио массив недоступны из этого места. Как мне получить к ним доступ из getView ()?
import java.util.ArrayList;
import android.content.Context;
import android.content.res.Resources;
import android.graphics.Color;
import android.graphics.Typeface;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.provider.MediaStore.Images;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;
public class MyList extends Fragment {
ListView list;
MediaPlayer mp;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedinstanceState)
{
mp=MediaPlayer.create(getActivity(), R.raw.wave1);
return inflater.inflate(R.layout.mylistview, container, false);
}
@Override
public void onStart() {
super.onStart();
list=(ListView)getView().findViewById(R.id.listView1);
list.setAdapter(new MyAdapter(getActivity()));
list.setCacheColorHint(Color.TRANSPARENT);
list.setOnItemClickListener(new OnItemClickListener(){
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int position,
long arg3)
{
switch(position)
{
case 0:
mp.release();
mp=MediaPlayer.create(getActivity(), R.raw.wave1);
mp.start();
}
}
});
}
}
class MyAdapter extends BaseAdapter
{
ArrayList<SingleRow> list;
Context context;
public MyAdapter(Context c)
{
context=c;
list=new ArrayList<SingleRow>();
Resources res=c.getResources();
String[] audio=res.getStringArray(R.array.audio);
int[] images={
R.drawable.image,
};
for(int i=0;i<2;i++)
{
list.add(new SingleRow(audio[i],images[i]));
}
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return list.size();
}
@Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return list.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View row=convertView;
MyViewHolder holder=null;
if(row==null)
{
LayoutInflater inflater=(LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
row=inflater.inflate(R.layout.list_rows, parent, false);
holder=new MyViewHolder(row);
row.setTag(holder);
}
else
{
holder=(MyViewHolder)row.getTag();
}
/* The following two statements don't work, because images and the audio array are not accessible.
holder.imageView.setImageResource(images[position]);
holder.textView.setText(audio[position]);
*/
return row;
}
class MyViewHolder
{
ImageView imageView;
TextView textView;
MyViewHolder(View v)
{
textView=(TextView)v.findViewById(R.id.textView1);
imageView=(ImageView)v.findViewById(R.id.imageView1);
}
}
class SingleRow
{
String audio;
int image;
SingleRow(String audio, int image)
{
this.audio=audio;
this.image=image;
}
}
}
РЕДАКТИРОВАТЬ:
Класс MyAdapter теперь выглядит следующим образом. Теперь приложение запускается, но фрагмент пустой, без представлений вообще.
class MyAdapter extends BaseAdapter
{
ArrayList<SingleRow> list;
Context context;
int[] images1 = null;
String[] audio = null;
public MyAdapter(Context c) {
context=c;
list=new ArrayList<SingleRow>();
//Initialize them...
Resources res=c.getResources();
audio = res.getStringArray(R.array.audio);
int[] images1={
R.drawable.image,
};
for(int i=0;i<2;i++)
{
list.add(new SingleRow(audio[i],images1[i]));
}
}
Resources res=context.getResources();
String[] audio=res.getStringArray(R.array.audio);
@Override
public int getCount() {
// TODO Auto-generated method stub
return list.size();
}
@Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return list.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View row=convertView;
MyViewHolder holder=null;
if(row==null)
{
LayoutInflater inflater=(LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
row=inflater.inflate(R.layout.list_rows, parent, false);
holder=new MyViewHolder(row);
row.setTag(holder);
}
else
{
holder=(MyViewHolder)row.getTag();
}
holder.imageView.setImageResource(images1[position]);
holder.textView.setText(audio[position]);
return row;
}
class MyViewHolder
{
ImageView imageView;
TextView textView;
MyViewHolder(View v)
{
textView=(TextView)v.findViewById(R.id.textView1);
imageView=(ImageView)v.findViewById(R.id.imageView1);
}
}
class SingleRow
{
String audio;
int image;
SingleRow(String audio, int image)
{
this.audio=audio;
this.image=image;
}
}
}
1 ответ
class MyAdapter extends BaseAdapter
{
ArrayList<SingleRow> list;
Context context;
//Just declare them as class members
int[] images = null;
String[] audio = null;
public MyAdapter(Context c)
{
context=c;
list=new ArrayList<SingleRow>();
//Initialize them...
Resources res=c.getResources();
audio = res.getStringArray(R.array.audio);
images1= new int[] { R.drawable.image };
//Noticed you only have an element,
//while I do not recommend to hardcode the positions,
//I added it for compilation's sake
list.add(new SingleRow(audio[0],images[0]));
//... And the rest
}
Похожие вопросы
Новые вопросы
android
Android - это мобильная операционная система Google, используемая для программирования или разработки цифровых устройств (смартфоны, планшеты, автомобили, телевизоры, одежда, стекло, IoT). Для тем, связанных с Android, используйте специальные теги Android, такие как android-intent, android-activity, android-адаптер и т. Д. Для вопросов, не связанных с разработкой или программированием, но связанных с платформой Android, используйте эту ссылку: https: // android.stackexchange.com .
context
иlist
в классеMyAdapter