我有一个带有自定义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>
答案 0 :(得分:2)
您的String.equals
比较链未检查未显示的两个值的正确值。您正在检查“JS”而不是“Javascript class”和“txt”而不是“Text”。
除此之外,我还有一些建议:
getItem(position)
来获取当前行的字符串。int-array
,并让每个项目指向与您string-array
中的项目相对应的可绘制项。getView
时都从资源构建它们。与LayoutInflater
相同(在适配器的构造函数中构建这些)。然后,您可以将可绘制ID设为intArray[position]
,而不是String.equals()
比较链。答案 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);
}
...............
...............
}