Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/224.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 使用ViewHolder设置图像和文本_Android_Performance_Android Layout_Android Listview_Android Fragments - Fatal编程技术网

Android 使用ViewHolder设置图像和文本

Android 使用ViewHolder设置图像和文本,android,performance,android-layout,android-listview,android-fragments,Android,Performance,Android Layout,Android Listview,Android Fragments,我无法从getView()函数访问图像和音频数组。我已经注释掉了我尝试过的语句。这些注释位于代码的底部,在ViewHolder类之前 我尝试过使用如下语句: holder.imageView.setImageResource(images[position]); holder.textView.setText(audio[position]); 但是图像和音频阵列无法从该位置访问。如何从getView()访问它们 import java.util.ArrayList; 导入android.co

我无法从getView()函数访问图像和音频数组。我已经注释掉了我尝试过的语句。这些注释位于代码的底部,在ViewHolder类之前

我尝试过使用如下语句:

holder.imageView.setImageResource(images[position]);
holder.textView.setText(audio[position]);
但是图像和音频阵列无法从该位置访问。如何从getView()访问它们

import java.util.ArrayList;
导入android.content.Context;
导入android.content.res.Resources;
导入android.graphics.Color;
导入android.graphics.Typeface;
导入android.media.MediaPlayer;
导入android.os.Bundle;
导入android.provider.MediaStore.Images;
导入android.support.v4.app.Fragment;
导入android.view.LayoutInflater;
导入android.view.view;
导入android.view.ViewGroup;
导入android.widget.AdapterView;
导入android.widget.AdapterView.OnItemClickListener;
导入android.widget.BaseAdapter;
导入android.widget.ImageView;
导入android.widget.ListView;
导入android.widget.TextView;
公共类MyList扩展了片段{
列表视图列表;
MediaPlayer mp;
@凌驾
CreateView上的公共视图(布局、充气机、视图组容器、捆绑包保存状态)
{
mp=MediaPlayer.create(getActivity(),R.raw.wave1);
返回充气机。充气(R.layout.mylistview,容器,假);
}
@凌驾
public void onStart(){
super.onStart();
list=(ListView)getView().findViewById(R.id.listView1);
setAdapter(新的MyAdapter(getActivity());
setCacheColorHint(Color.TRANSPARENT);
list.setOnItemClickListener(新的OnItemClickListener(){
@凌驾
公共单击(适配器视图arg0,视图arg1,内部位置,
长arg3)
{
开关(位置)
{
案例0:
mp.release();
mp=MediaPlayer.create(getActivity(),R.raw.wave1);
mp.start();
}
}
});
}
}
类MyAdapter扩展了BaseAdapter
{
数组列表;
语境;
公共MyAdapter(上下文c)
{
上下文=c;
列表=新的ArrayList();
Resources res=c.getResources();
String[]audio=res.getStringArray(R.array.audio);
int[]图像={
R.drawable.image,
};
对于(inti=0;i
类MyAdapter扩展BaseAdapter)
{
数组列表;
语境;
//只需将它们声明为类成员
int[]图像=null;
字符串[]音频=null;
公共MyAdapter(上下文c)
{
上下文=c;
列表=新的ArrayList();
//初始化它们。。。
Resources res=c.getResources();
audio=res.getStringArray(R.array.audio);
images1=新int[]{R.drawable.image};
//注意到你只有一个元素,
//虽然我不建议对职位进行硬编码,
//我添加它是为了编译
添加(新的单行(音频[0],图像[0]);
//…还有其他
}

在类级别而不是在类构造函数内部声明这两个属性,这样您就可以在整个类中访问它们。与您在
MyAdapter
中声明和初始化
上下文和
列表一样,感谢您的回复。将它们移出构造函数后,list.setAdapter(新建MyAdapter(getActivity());捕捉到一条红线,表示“构造函数MyAdapter(FragmentActivity)未定义”。因此我尝试了两件事。首先,注释掉它,应用程序在屏幕上没有任何列表视图的情况下运行(它是空的)。其次,我尝试按要求创建一个空构造函数,但程序崩溃了。谢谢,但现在在应用程序启动时,片段是空的。没有视图。注意到有一些错误,代码无法编译。编辑了答案以反映这一点。关于片段问题,请确保将片段附加到cor响应碎片活动:
    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;
            }
        }

        }
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;
    }
}

}
    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
    }