1

ExpandableListFragmentを使用して、TabHostフラグメント内にExpandableListを作成しています

ここからExpandableListFragmentのコードを入手しましたhttps://gist.github.com/1316903

テキストの色を変更する方法がわからないことを除けば、問題なく動作しているようです。

私の実装は次のようになります

public class LocalListFragment extends ExpandableListFragment {

    private static final String NAME = "NAME";
    private static final String IS_EVEN = "IS_EVEN";

    private ArrayList<String> mGroups;
    private ArrayList<ArrayList<Song>> mChildren;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {
        // Set up our adapter

        List<Map<String, String>> groupData = new ArrayList<Map<String, String>>();
        List<List<Map<String, String>>> childData = new ArrayList<List<Map<String, String>>>();
        for (int i = 0; i < 10; i++) {
            Map<String, String> curGroupMap = new HashMap<String, String>();
            groupData.add(curGroupMap);
            curGroupMap.put(NAME, "GROUP" + i);
            //curGroupMap.put(IS_EVEN, (i % 2 == 0) ? "This group is even" : "This group is odd");

            List<Map<String, String>> children = new ArrayList<Map<String, String>>();
            for (int j = 0; j < 5; j++) {
                Map<String, String> curChildMap = new HashMap<String, String>();
                children.add(curChildMap);
                curChildMap.put(IS_EVEN, "Child " + j);
            }
            childData.add(children);
        }


        mAdapter = new SimpleExpandableListAdapter(
            getActivity().getApplicationContext(),
            groupData,
            android.R.layout.simple_expandable_list_item_1,
            new String[] { NAME, IS_EVEN },
            new int[] { android.R.id.text1, android.R.id.text2 },
            childData,
            android.R.layout.simple_expandable_list_item_2,
            new String[] { NAME, IS_EVEN },
            new int[] { android.R.id.text1, android.R.id.text2 }
        );

        //TextView tv = (TextView)getActivity().findViewById(android.R.id.text1);
        //tv.setTextColor(0xffff0000);
        setListAdapter(mAdapter);

        return super.onCreateView(inflater, container, savedInstanceState);
    }

    @Override
    public void onListItemClick(ListView l, View v, int position, long id) {
        Log.i("TAG", "Item selected");
    }

}

私の推測では、「new int [] {android.R.id.text1、android.R.id.text2}」という行はそれと多くの関係がありますが、これについては少し混乱しています。

誰か助けてもらえますか?新しいTextViewIDを作成し、textColorを指定する必要がありますか?私は試しましたが、それを理解できませんでした。ありがとう。

4

3 に答える 3

6

リストアダプタのorverridegetviewメソッドだけ:

mAdapter = new SimpleExpandableListAdapter(
            getActivity().getApplicationContext(),
            groupData,
            android.R.layout.simple_expandable_list_item_1,
            new String[] { NAME, IS_EVEN },
            new int[] { android.R.id.text1, android.R.id.text2 },
            childData,
            android.R.layout.simple_expandable_list_item_2,
            new String[] { NAME, IS_EVEN },
            new int[] { android.R.id.text1, android.R.id.text2 }){


                @Override
                public View getChildView(int groupPosition, int childPosition,
                        boolean isLastChild, View convertView, ViewGroup parent) {

                    TextView tv =  (TextView) super.getChildView(groupPosition, childPosition, isLastChild,convertView, parent);
                    //change background of tv here
                    return tv;
                }

                @Override
                public View getGroupView(int groupPosition, boolean isExpanded,
                        View convertView, ViewGroup parent) {
                    // TODO Auto-generated method stub
                    TextView tv = (TextView) super.getGroupView(groupPosition, isExpanded, convertView, parent);
                    //change background of tv here
                    return tv;
                }

    };
于 2013-01-29T14:10:46.103 に答える
0

私は一方向に解決しました

私はこのようなSimpleExpandableListAdapterの派生クラス(またはJavaが話すものは何でも)を作成しました

class MySimpleExpandableListAdapter extends SimpleExpandableListAdapter {

        public MySimpleExpandableListAdapter(Context context,
                List<? extends Map<String, ?>> groupData, int groupLayout,
                String[] groupFrom, int[] groupTo,
                List<? extends List<? extends Map<String, ?>>> childData,
                int childLayout, String[] childFrom, int[] childTo) {
            super(context, groupData, groupLayout, groupFrom, groupTo, childData,
                    childLayout, childFrom, childTo);
            // TODO Auto-generated constructor stub
        }

        @Override
        public View getChildView(int groupPosition, int childPosition, 
                boolean isLastChild, View convertView, ViewGroup parent)
        {
            final View itemRenderer = super.getChildView(groupPosition, childPosition, isLastChild, convertView, parent);
            final TextView tv2 = (TextView)itemRenderer.findViewById(android.R.id.text2);
            tv2.setTextColor(0xff0000ff);
            return itemRenderer;
        }

        @Override
        public  View    getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent){

            final View itemRenderer = super.getGroupView(groupPosition, isExpanded, convertView, parent);
            final TextView tv = (TextView)itemRenderer.findViewById(android.R.id.text1);
            tv.setTextColor(0xff00ff00);
            return itemRenderer;
         }
    }

ここで重要なのは、getChildViewとgetGroupViewのオーバーライドです。これにより、android.R.id.text1と2つのリソースをいじることができます。これが最も効率的な方法ではないかと思いますが、うまくいくようです。

于 2013-01-29T14:10:25.593 に答える
0

Anandに感謝します。その構文は、新しいクラスを作成するよりもきれいに見えます。派生クラスを作成せずにメソッドをオーバーライドできることを知りませんでした。c++にはありません。

ただし、getChildViewのコードが少し間違っているため、クラッシュします。以下の作品

 mAdapter = new SimpleExpandableListAdapter(
            getActivity().getApplicationContext(),
            groupData,
            android.R.layout.simple_expandable_list_item_1,
            new String[] { NAME, IS_EVEN },
            new int[] { android.R.id.text1, android.R.id.text2 },
            childData,
            android.R.layout.simple_expandable_list_item_2,
            new String[] { NAME, IS_EVEN },
            new int[] { android.R.id.text1, android.R.id.text2 }
        ) {
            @Override
            public View getChildView(int groupPosition, int childPosition, 
                    boolean isLastChild, View convertView, ViewGroup parent)
            {
                final View itemRenderer = super.getChildView(groupPosition, childPosition, isLastChild, convertView, parent);
                final TextView tv = (TextView)itemRenderer.findViewById(android.R.id.text2);
                tv.setTextColor(Color.BLACK);
                return itemRenderer;
            }

            @Override
            public  View    getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) {
                TextView tv = (TextView) super.getGroupView(groupPosition, isExpanded, convertView, parent);
                tv.setTextColor(Color.BLUE);
                return tv;
            }
        };
于 2013-01-30T01:05:49.310 に答える