Android:片段列表视图

时间:2015-11-18 08:29:41

标签: android

布局中的第一个子节点是导航抽屉布局中主Activity UI的列表视图。我正在尝试使用片段和导航抽屉布局显示列表视图,但列表视图不会显示在主Activity UI中。有人可以帮助我如何显示list.Thanks in advanced。

这是我的代码

<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/drawer_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <!-- The first child in the layout is for the main Activity UI-->
    <FrameLayout
        android:id="@+id/content_frame"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

    <!-- Side navigation drawer UI -->
    <ListView
        android:id="@+id/navList"
        android:layout_width="200dp"
        android:layout_height="match_parent"
        android:layout_gravity="left|start"
        android:background="#ffeeeeee" />

</android.support.v4.widget.DrawerLayout>

MainActivity.java:

public class MainActivity extends ActionBarActivity {

    private ListView mDrawerList ;
    private DrawerLayout mDrawerLayout;
    private ArrayAdapter<String> mAdapter;
    private ActionBarDrawerToggle mDrawerToggle;
    private String mActivityTitle;
    Fragment fragment = null;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        mDrawerList = (ListView) findViewById(R.id.navList);
        mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
        mActivityTitle = getTitle().toString();

        addDrawerItems();
        setupDrawer();

        getSupportActionBar().setDisplayHomeAsUpEnabled(true);
        getSupportActionBar().setHomeButtonEnabled(true);

        fragment = new YourListFragment();
        if (fragment != null)
        {
            FragmentManager fragmentManager = getFragmentManager();
            fragmentManager.beginTransaction()
                    .replace(R.id.content_frame, fragment)
                    .commit();
        }
    }

    private void addDrawerItems() {
        String[] osArray = {"Android", "iOS", "Windows", "OS X", "Linux"};
        mAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, osArray);
        mDrawerList.setAdapter(mAdapter);

        mDrawerList.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                Toast.makeText(MainActivity.this, "Time for an upgrade!", Toast.LENGTH_SHORT).show();
            }
        });
    }

    private void setupDrawer() {
        mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout, R.string.drawer_open, R.string.drawer_close) {

            /** Called when a drawer has settled in a completely open state. */
            public void onDrawerOpened(View drawerView) {
                super.onDrawerOpened(drawerView);
                getSupportActionBar().setTitle("Navigation!");
                invalidateOptionsMenu(); // creates call to onPrepareOptionsMenu()
            }

            /** Called when a drawer has settled in a completely closed state. */
            public void onDrawerClosed(View view) {
                super.onDrawerClosed(view);
                getSupportActionBar().setTitle(mActivityTitle);
                invalidateOptionsMenu(); // creates call to onPrepareOptionsMenu()
            }
        };

        mDrawerToggle.setDrawerIndicatorEnabled(true);
        mDrawerLayout.setDrawerListener(mDrawerToggle);
    }

    @Override
    protected void onPostCreate(Bundle savedInstanceState) {
        super.onPostCreate(savedInstanceState);
        // Sync the toggle state after onRestoreInstanceState has occurred.
        mDrawerToggle.syncState();
    }

    @Override
    public void onConfigurationChanged(Configuration newConfig) {
        super.onConfigurationChanged(newConfig);
        mDrawerToggle.onConfigurationChanged(newConfig);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.menu_main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {

        int id = item.getItemId();
        if (id == R.id.action_settings) {
            return true;
        }

        // Activate the navigation drawer toggle
        if (mDrawerToggle.onOptionsItemSelected(item)) {
            return true;
        }

        return super.onOptionsItemSelected(item);
    }
}

以片段

显示列表视图
public class YourListFragment extends Fragment {

    int DR_CAMERA_REQUEST = 99999;
    ListView allPostListView;
    MyListAdapter adapter;
    ArrayList<Bitmap> bitmapArray = new ArrayList<Bitmap>();
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

        View rootView = inflater.inflate(R.layout.all_post_list_fragment, container, false);
        allPostListView = (ListView)rootView.findViewById(R.id.listview_AllPost);
        adapter = new MyListAdapter(getActivity().getBaseContext(),R.layout.all_post_row, bitmapArray);
        allPostListView.setAdapter(adapter);
        return rootView;
    }

    public  void onActivityResult(int requestCode, int resultCode, Intent data)
    {
        super.onActivityResult(requestCode, resultCode, data);


        if (requestCode == DR_CAMERA_REQUEST )
        {
            Bitmap photo = (Bitmap) data.getExtras().get("data");
            Log.e("photo ", " = " + photo);
            bitmapArray.add(photo);
            //imgProfilePic.setImageBitmap(photo);
        }
    }
}

适配器类

class MyListAdapter extends ArrayAdapter {
    Context context;
    int layoutResourceId;
    int DR_CAMERA_REQUEST = 99999;
    ArrayList<Bitmap> bmp = new ArrayList<Bitmap>();
    ProgressBar pBar;int fixedHeight = 220;
    public MyListAdapter(Context context, int layoutResourceId , ArrayList<Bitmap> bitmapArray) {
        super(context, layoutResourceId);
        this.layoutResourceId = layoutResourceId;
        this.context = context;
        this.bmp = bitmapArray;
    }

    @Override
    public int getCount() {
        return bmp.size();
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    @Override
    public View getView(final int position, View row, ViewGroup parent) {

        final Holder holder;
        if (row == null)
        {
            LayoutInflater vi;
            vi = LayoutInflater.from(getContext());
            row = vi.inflate(R.layout.all_post_row, parent, false);
            holder = new Holder();

            holder.horizontalScrollView = (HorizontalScrollView) row.findViewById(R.id.hlist);
            holder.lLinearLayout = (LinearLayout) row.findViewById(R.id.innerlay);
            holder.imgBtn_Camera = (ImageView) row.findViewById(R.id.imgButton_Camera);

            row.setTag(holder);
        }

        else
        {
            holder = (Holder) row.getTag();
        }

        LayoutInflater mInflater;
        mInflater = LayoutInflater.from(getContext());
        View cur_deal = mInflater.inflate(R.layout.horizontalitem, holder.lLinearLayout, false);
        RelativeLayout rLayout = (RelativeLayout) cur_deal.findViewById(R.id.img_layout);
        final ImageView imageView = (ImageView) cur_deal.findViewById(R.id.image_AllPost);
        pBar = (ProgressBar) cur_deal.findViewById(R.id.pBar_AllPost);

        holder.lLinearLayout.removeAllViews();

        if(bmp.size() > 0)
        {
            int index = bmp.size() -1;
            rLayout.getLayoutParams().height = fixedHeight;
            Bitmap lastbitmap = bmp.get(index);
            imageView.setImageBitmap(lastbitmap);
            pBar.setVisibility(View.VISIBLE);
            holder.lLinearLayout.addView(cur_deal);
        }

        //OnClickListener for camera button in the List
            holder.imgBtn_Camera.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v)
                {
                    Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
                    ((Activity)context).startActivityForResult(cameraIntent, DR_CAMERA_REQUEST);
                    Log.e("Camera", " Open");

                }
            });

        return row;
        }

    final class Holder {

        ImageView imgBtn_Camera;
        LinearLayout lLinearLayout;
        HorizontalScrollView horizontalScrollView;
    }

}

这是我的all_post_row.xml文件

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@android:color/white"
    android:descendantFocusability="blocksDescendants"
    android:orientation="vertical">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginLeft="40dp"
        android:orientation="vertical">

        <HorizontalScrollView
            android:id="@+id/hlist"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="1dp"
            android:background="@android:color/white"
            android:fillViewport="true"
            android:measureAllChildren="false"

            android:scrollbars="none">

            <LinearLayout
                android:id="@+id/innerlay"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginLeft="10dp"
                android:background="@android:color/white"
                android:orientation="horizontal"

                >

            </LinearLayout>
        </HorizontalScrollView>
    </LinearLayout>

    <LinearLayout
        android:id="@+id/buttonslayout"
        android:layout_width="match_parent"
        android:layout_height="26dp"
        android:layout_marginTop="10dp"
        android:background="#D8D8D8"
        android:orientation="horizontal">


        <ImageView
            android:id="@+id/imgButton_FoloowUp"
            android:layout_width="0dp"
            android:layout_height="fill_parent"
            android:layout_marginLeft="20dp"
            android:layout_weight="1"
            android:contentDescription="desc"
            android:src="@drawable/follow_up_grey" />


        <ImageView
            android:id="@+id/imgButton_Camera"
            android:layout_width="0dp"
            android:layout_height="fill_parent"
            android:layout_weight="1"
            android:contentDescription="desc"
            android:src="@drawable/camera_grey" />


        <ImageView
            android:id="@+id/imgButton_RecordAudio"
            android:layout_width="0dp"
            android:layout_height="fill_parent"
            android:layout_weight="1"
            android:contentDescription="desc"
            android:src="@drawable/recorder_gray" />


    </LinearLayout>

</LinearLayout>

这是horizo​​ntal.xml文件

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/img_layout"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:background="@android:color/transparent"
    android:paddingLeft="1dp">

    <ImageView
        android:id="@+id/image_AllPost"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_centerVertical="true" />

    <ProgressBar
        android:id="@+id/pBar_AllPost"
        style="?android:attr/progressBarStyleSmall"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_centerVertical="true" />


</RelativeLayout>

1 个答案:

答案 0 :(得分:0)

更改

<FrameLayout
        android:id="@+id/content_frame"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

到:

<FrameLayout
        android:id="@+id/content_frame"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />