2

我正在尝试在 Android 4.2 上创建一个主/详细流应用程序。

我创建了一个主细节流程项目,但我想实现一个ExpandableListView而不是提供的ListView那个。

主/细节使用片段,这就是我卡住的地方......我已经在一个单独的项目中成功地创建了一个可扩展的列表视图。如何在主/详细流中实现它?

4

2 回答 2

4

我假设您使用 IDE 向导创建了 Master/Detail 示例项目。如果是这样,那么您可能会看到向导创建了一个ItemListFragment默认为 extends 的类ListFragment

如果您需要将简单列表替换为可扩展列表,则必须:

  1. 扩展自Fragment, 而不是ListFragment
  2. 创建一个 xml 布局文件,在其中声明一个ExpandableListView
  3. 覆盖onCreateView()并扩展包含ExpandableListView
  4. 获取对 的引用ExpandableListView,然后像以前一样使用它。

像这样的东西:

// extend from Fragment
public class ItemListFragment extends Fragment {

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

        // inflate the layout that contains the ExpandableListView
        View view =  inflater.inflate(R.layout.fragment_items_list, container, false);

        // get a reference to ExpandableListView
        ExpandableListView list = (ExpandableListView)view.findViewById(R.id.my_list);

        // set the adapter
        // set listeners
        return view;
    }
}
于 2013-09-22T18:18:19.977 回答
3

我不知道如何创建 ExpandableListView,但您可以像我在项目中实现的那样使用自定义列表视图来实现

1.创建自定义列表行

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="#00000000" >

    <RelativeLayout
        android:id="@+id/rel_main"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true" >

        <TextView
            android:id="@+id/text1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentTop="true"
            android:layout_marginRight="18dp"
            android:layout_marginTop="17dp"
            android:layout_toLeftOf="@+id/imageView1"
            android:paddingBottom="15dp"
            android:text="Large Text"
            android:textAppearance="?android:attr/textAppearanceLarge"
            android:textColor="#685f56" />

        <ImageView
            android:id="@+id/imageView1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentRight="true"
            android:layout_alignTop="@+id/text1"
            android:layout_marginRight="16dp"
            android:layout_marginTop="5dp"
            android:src="@drawable/highlight_icon" />
    </RelativeLayout>

    <RelativeLayout
        android:id="@+id/relativeLayout1"
        android:layout_width="fill_parent"
        android:layout_height="300dp"
        android:layout_alignParentLeft="true"
        android:layout_below="@+id/rel_main"
        android:visibility="gone" >
    </RelativeLayout>

    <View
        android:id="@+id/view1"
        android:layout_width="fill_parent"
        android:layout_height="1dp"
        android:layout_alignParentLeft="true"
        android:layout_below="@+id/relativeLayout1"
        android:background="#685f56" />

</RelativeLayout>

**2。在“ItemListFragment.java”中创建自定义适配器**

public class CustomAdepeterNewJob extends BaseAdapter{

        //String[] tablecontent;
        int Click=0;
        Map<String, DummyItem> tablecontent = new HashMap<String, DummyItem>();
        Context context;

        public CustomAdepeterNewJob(Context context, Map<String, DummyItem> titles)
        {
            this.context = context;
            this.tablecontent = titles;
        }


        public class ViewHolder {
        public  TextView txt;
        public  ImageView img;
        public  RelativeLayout relativeLayout1,rel_main;
        }

        @Override
        public int getCount() {
            // TODO Auto-generated method stub
            return tablecontent.size();
        }

        @Override
        public Object getItem(int arg0) {
            // TODO Auto-generated method stub
            return null;
        }

        @Override
        public long getItemId(int position) {
            // TODO Auto-generated method stub
            return 0;
        }

        @Override
        public View getView(final int position, View convertView, ViewGroup parent) {
            // TODO Auto-generated method stub
            View view = convertView;
            final ViewHolder holder;
            if (convertView == null) {

                LayoutInflater inflater = ((Activity) context).getLayoutInflater();
                view = inflater.inflate(R.layout.c_simple_list_item, parent, false);

                holder = new ViewHolder();
                holder.txt = (TextView) view.findViewById(R.id.text1);
                holder.img = (ImageView) view.findViewById(R.id.imageView1);
                holder.rel_main=(RelativeLayout) view.findViewById(R.id.rel_main);
                holder.relativeLayout1=(RelativeLayout) view.findViewById(R.id.relativeLayout1);
                view.setTag(holder);
            } else {
                holder = (ViewHolder) view.getTag();
            }
            String s=DummyContent.ITEMS.get(position).content;
            System.out.println("==dummy "+s);
            holder.txt.setText(s);
            if (s.equalsIgnoreCase("All")) 
            {
                holder.img.setImageResource(R.drawable.all_icon);
            }else if (s.equalsIgnoreCase("Note"))   {
                holder.img.setImageResource(R.drawable.notes_icon);
            }else if (s.equalsIgnoreCase("Highlight"))  {
                holder.img.setImageResource(R.drawable.highlight_icon);
            }else if (s.equalsIgnoreCase("Snapshots"))  {
                holder.img.setImageResource(R.drawable.snapshot_icon);
            }else if (s.equalsIgnoreCase("Draw"))   {
                holder.img.setImageResource(R.drawable.draw_icon);
            }else if (s.equalsIgnoreCase("Record Sounde"))  {
                holder.img.setImageResource(R.drawable.sound_recorder_icon);
            }

            view.setOnClickListener(new OnClickListener() {

                @Override
                public void onClick(View v) {
                    // TODO Auto-generated method stub

                    mCallbacks.onItemSelected(DummyContent.ITEMS.get(position).id);
                    if (holder.relativeLayout1.getVisibility()==View.GONE)
                    {
                        holder.rel_main.setBackgroundResource(R.drawable.list_item_bg_pressed);
                        holder.relativeLayout1.setVisibility(View.VISIBLE);
                    }else {

                        holder.relativeLayout1.setVisibility(View.GONE);
                        holder.rel_main.setBackgroundColor(Color.TRANSPARENT);
                    }
                }
            });


            return view;
        }

    }

3.并在ItemListFregment的“onCreate”中添加自定义适配器

public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        // TODO: replace with a real list adapter.
        /*setListAdapter(new ArrayAdapter<DummyContent.DummyItem>(getActivity(),
                R.layout.c_simple_list_item, R.id.text1, DummyContent.ITEMS));*/

        setListAdapter(new CustomAdepeterNewJob(getActivity(), DummyContent.ITEM_MAP));
    }

自定义列表视图 单击列表项后

于 2014-01-09T07:16:30.400 回答