0

他のすべてのリストアイテムのみがアイコンを表示していることを除いて、リストアイテムの横にアイコンをロードするカスタムArrayAdapterを備えたリストがあります

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

2 に答える 2

2

一連のString.equals比較は、表示されていない 2 つの正しい値をチェックしていません。「Javascript クラス」ではなく「JS」、「テキスト」ではなく「txt」をチェックしています。

それとは別に、いくつかの提案があります。

  1. ArrayAdapter を使用すると、getItem(position)代わりに呼び出して現在の行の文字列を取得できます。
  2. リソースint-arrayに を作成し、各アイテムが 内のアイテムに対応するドローアブルを指すようにしますstring-array
  3. getViewが呼び出されるたびにリソースから配列を構築するのではなく、アダプターにこれらの配列のローカル コピーを格納させます。についても同じですLayoutInflater(アダプターのコンストラクターでこれらをビルドします)。intArray[position]次に、一連のString.equals()比較の代わりにドローアブル ID を取得できます。
  4. Shoshiが指摘したように、可能な限りconvertViewを使用してください。
于 2013-02-19T04:41:20.683 に答える
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);
}

...............
...............
}
于 2013-02-19T03:34:32.537 に答える