ListView中的每个其他图标都不显示

时间:2013-02-19 03:02:24

标签: java android listview icons

我有一个带有自定义ArrayAdapter的List,它可以加载列表项旁边的图标,只是每隔一个列表项都显示一个图标

public class MyAdapter extends ArrayAdapter<String>{
    Context mContext;

    public MyAdapter(Context context, int resource, int textViewResourceId, String[] strings) {
        super(context, resource, textViewResourceId, strings);
        this.mContext = context;
    }
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        LayoutInflater inflater = (LayoutInflater)mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        View row = inflater.inflate(R.layout.filetypeslist, parent, false);
        String[] items = mContext.getResources().getStringArray(R.array.filetypes);

        ImageView iv = (ImageView) row.findViewById(R.id.imageView1);
        TextView tv = (TextView) row.findViewById(R.id.tvtype);

        tv.setText(items[position]);

        if(items[position].equals("txt")){
            iv.setImageResource(R.drawable.txticon);//not showing up
        }else if(items[position].equals("HTML")){
            iv.setImageResource(R.drawable.htmlicon);
        }else if(items[position].equals("JS")){
            iv.setImageResource(R.drawable.javascripticon);//not showing up
        }else if(items[position].equals("CSS")){
            iv.setImageResource(R.drawable.cssicon);
        }

        return row;
    }

}

public class NewFile extends ListActivity {
    EditTextLineNumbers newet;
    LayoutInflater mInflater;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        setContentView(R.layout.new_file);
        setListAdapter(new MyAdapter(this, 
                android.R.layout.simple_list_item_1, R.id.tvtype, 
                getResources().getStringArray(R.array.filetypes)));
    }


}

***EDIT***
public View getView(int position, View convertView, ViewGroup parent) {

        View row = convertView;
        if (row == null) {
            LayoutInflater inflater = (LayoutInflater)mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            row = inflater.inflate(R.layout.filetypeslist, parent, false);
        }
        String[] items = mContext.getResources().getStringArray(R.array.filetypes);

        ImageView iv = (ImageView) row.findViewById(R.id.imageView1);
        TextView tv = (TextView) row.findViewById(R.id.tvtype);

        tv.setText(items[position]);

        if(items[position].equals("txt")){
            iv.setImageResource(R.drawable.txticon);
        }else if(items[position].equals("HTML")){
            iv.setImageResource(R.drawable.htmlicon);
        }else if(items[position].equals("JS")){
            iv.setImageResource(R.drawable.javascripticon);
        }else if(items[position].equals("PHP")){
            iv.setImageResource(R.drawable.phpicon);
        }else if(items[position].equals("CSS")){
            iv.setImageResource(R.drawable.cssicon);
        }

        return row;
    }

<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android">
    <string-array name="filetypes">
        <item name="txt">Text</item>
        <item name="html">HTML</item>
        <item name="js">Javascript Class</item>
        <item name="css">CSS</item>
        <item name="php">PHP Class</item>
    </string-array>
</resources>

2 个答案:

答案 0 :(得分:2)

您的String.equals比较链未检查未显示的两个值的正确值。您正在检查“JS”而不是“Javascript class”和“txt”而不是“Text”。

除此之外,我还有一些建议:

  1. 使用ArrayAdapter,您可以通过调用getItem(position)来获取当前行的字符串。
  2. 在您的资源中设置int-array,并让每个项目指向与您string-array中的项目相对应的可绘制项。
  3. 让适配器存储这些数组的本地副本,而不是每次调用getView时都从资源构建它们。与LayoutInflater相同(在适配器的构造函数中构建这些)。然后,您可以将可绘制ID设为intArray[position],而不是String.equals()比较链。
  4. 尽可能使用convertView,如Shoshi指出的那样。

答案 1 :(得分:0)

你应该这样使用:

@Override
public View getView(int position, View convertView, ViewGroup parent) {

View row = convertView;
if (view == null) {
    LayoutInflater inflater = (LayoutInflater)mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    row = inflater.inflate(R.layout.filetypeslist, parent, false);
}

...............
...............
}