

<http://gacken.com/wp/program/android/1927/>  
を参考にアンドロイドのフラグメントにアダプターを入れて表示させたのですが  
１ ２ ３は表示されるのですがグループは表示されません。  
どのようにすれば解決するのでしょうか。

ItemListFragment.java

[code]

    public class ItemListFragment extends ListFragment {
    
    private Callbacks mCallbacks = sDummyCallbacks;
    public class GroupSpinnerItem {
        public boolean isGroup;        // グループフラグ
        public String itemName;        // アイテム名
    
        public GroupSpinnerItem(boolean isGroup, String itemName) {
            this.isGroup = isGroup;
            this.itemName = itemName;
        }
    }
    
    public interface Callbacks {
    
        void onItemSelected(String id);
    }
    
    private static Callbacks sDummyCallbacks = new Callbacks() {
        @Override
        public void onItemSelected(String id) {
        }
    };
    
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    
            GroupSpinnerAdapter adapter = new GroupSpinnerAdapter(getContext());
    
                adapter.addItem(new GroupSpinnerItem(true, "グループ"));
                adapter.addItem(new GroupSpinnerItem(false, "１"));
                adapter.addItem(new GroupSpinnerItem(false, "２"));
                adapter.addItem(new GroupSpinnerItem(false, "３"));
                setListAdapter(adapter);
                }
    
[/code]

GroupSpinnerAdapter.java

[code]

    public  class GroupSpinnerAdapter extends BaseAdapter {
    public static ArrayList<ItemListFragment.GroupSpinnerItem> itemList = new ArrayList<ItemListFragment.GroupSpinnerItem>();
    public static LayoutInflater inflater;
    public GroupSpinnerAdapter(Context context) {
        inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    }
    public static void addItem(ItemListFragment.GroupSpinnerItem item) {
        itemList.add(item);
    }
    public int getCount() {
        return itemList.size();
    }
    public Object getItem(int position) {
        return itemList.get(position);
    }
    public long getItemId(int position) {
        return position;
    }
    public View getView(int position, View convertView, ViewGroup parent) {
        return createView(position, convertView, parent, false);
    }
    @Override
    public View getDropDownView(int position, View convertView,
                ViewGroup parent) {
        return createView(position, convertView, parent, true);
    }
    public View createView(int position, View convertView, ViewGroup parent, boolean isDropDown) {
        TextView tvName = null;
        if(convertView instanceof TextView) {
            tvName = (TextView)convertView;
        }
        if(tvName == null) {
            tvName = (TextView)inflater.inflate(android.R.layout.simple_spinner_item, parent, false);
        }
        ItemListFragment.GroupSpinnerItem item = itemList.get(position);
        if(item.isGroup) {
            if(isDropDown) {
                tvName.setTypeface(Typeface.create(Typeface.DEFAULT, Typeface.BOLD));
                tvName.setText(item.itemName);
                tvName.setBackgroundColor(Color.BLUE);
            }
        }
        else {
            String text = "  " + item.itemName;
            tvName.setText(text);
            tvName.setBackgroundColor(Color.TRANSPARENT);
        }
        return tvName;
    }
    @Override
    public boolean isEnabled(int position) {
        return (itemList.get(position).isGroup == false);
    }
    }
    
[/code]


CC BY-SA 3.0
2015-11-14T08:01:00.067
18809
2015-11-14T12:51:36.627
2015-11-14T12:51:36.627
7290
13247
question
android java
アンドロイドのfragmentにアイテムを表示したいが上手くいかない


参考にされたページでは Spinner に対して BaseAdapter を継承したアダプタを適用しています。これを ListView
（ListFragment） で使用するアダプタにそのまま流用できる場合もあるんですが、このケースではそうではないということで。

ListView に適用したアダプタでは getDropDownView が呼ばれることはないので、 createView
の最後の引数（isDropDown）は常に false となります。それゆえ ListView で「グループ」は表示されません。

とりあえず解決するには、以下のように最後の引数を true に変えればオッケーだと思います。

[code]

    public View getView(int position, View convertView, ViewGroup parent) {
            return createView(position, convertView, parent, true);
    }
    
[/code]

もし後になって Spinner に対して使うことになったたら、 false に戻しましょう。


CC BY-SA 3.0
2015-11-14T09:28:31.350
18811
2015-11-14T09:28:31.350
7558
18809
answer