如何显示片段内不同布局 [英] How to Show Different Layouts inside Fragments

查看:180
本文介绍了如何显示片段内不同布局的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在Android蜂窝两个片段(表)工作。在左边的是一个的ListView ,并在右边是从列表中选择该项目的preVIEW。当点击一个按钮,我想在左侧显示不同的布局。这怎么可能?

I am working with two fragments in Android Honeycomb (Tab). In the left is a ListView and in the right is a preview of the item selected from the list. When one of the buttons is clicked, I want to show different layouts on the left. How is it possible?

先谢谢了。

推荐答案

您可以做到这一点,我做了使用这些链接的同样的事情,这是我的code,我喜欢与你在一起,希望分享这这将有助于你...你首先必须创建4布局。其中2将是横向模式,一为肖像模式,另一个用于平板电脑。你必须创建布局一对夫妇更多的文件夹和他们的名字应该像布局XLARGE 布局XLARGE端口,这种方式可以为移动设备和平板电脑打造的片段。

You can do this, I made the same thing with use of these links, here is my code which I am sharing with you in the hope that it will be helpful for you... You will first have to create 4 layouts. 2 of which will be for landscape mode, one for portrait mode and another for tablets. You have to create a couple more folders for layouts and their name should be like layout-xlarge and layout-xlarge-port, this way you can create fragments for both mobile devices and tablets.

MasterFragment活动:

public class MasterFragment extends ListFragment {
    Boolean isDualPane;
    int position;

    @Override
    public void onActivityCreated(Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
        ArrayList<String> parkNames = new ArrayList<String>();
        for (Park park : Resort.PARKS) {
            parkNames.add(park.getName());
        }

        setListAdapter(new ArrayAdapter<String>(getActivity(),
                android.R.layout.simple_list_item_1, parkNames));
        View detailFrame = getActivity().findViewById(R.id.detail);
        isDualPane = detailFrame != null && detailFrame.getVisibility() == View.VISIBLE;

        if (savedInstanceState != null) {
            position = savedInstanceState.getInt("position", 0);
        }

        if (isDualPane) {
            getListView().setChoiceMode(ListView.CHOICE_MODE_SINGLE);
            showDetail(position);
        }
    }

    @Override
    public void onSaveInstanceState(Bundle outState) {
        super.onSaveInstanceState(outState);
        outState.putInt("position", position);
    }

    @Override
    public void onListItemClick(ListView l, View v, int position, long id) {
        showDetail(position);
    }

    void showDetail(int position) {
        this.position = position;
        if (isDualPane) {
            getListView().setItemChecked(position, true);
            DetailFragment detailFragment = (DetailFragment) getFragmentManager()
                    .findFragmentById(R.id.detail);

            if (detailFragment == null || detailFragment.getIndex() != position) {
                detailFragment = new DetailFragment(position);
                FragmentTransaction ft = getFragmentManager()
                        .beginTransaction();
                ft.replace(R.id.detail, detailFragment);
                ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
                ft.commit();
            }
        } else {
            Intent intent = new Intent();
            intent.setClass(getActivity(), DetailActivity.class);
            intent.putExtra("position", position);
            startActivity(intent);
        }
    }
}        

第二项活动 - DetailFragment活动:

public class DetailActivity extends FragmentActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.detail_act);
        Bundle bundle = getIntent().getExtras();
        int position = bundle.getInt("position");
        System.out.println("RR : position is : " + position);

        Integer[] images = { R.drawable.pic1, R.drawable.pic2, R.drawable.pic3,
                R.drawable.pic4, R.drawable.pic5, R.drawable.pic6,
                R.drawable.pic7, R.drawable.pic8, R.drawable.pic9,
                R.drawable.pic10, R.drawable.pic11, R.drawable.pic12,
                R.drawable.pic13 };

        final ImageView imgview = (ImageView) findViewById(R.id.imageView1);
        imgview.setImageResource(images[position]);

        // DetailFragment detailFragment = new DetailFragment(position);
        // FragmentManager fm = getSupportFragmentManager();
        // FragmentTransaction ft =fm.beginTransaction();
        // ft.add(android.R.id.content, detailFragment).commit();

    }
}

现在,你必须创建第三个活动, MasterGridActivity 为我的图片,我正在使用的片段显示 GridView控件

Now you have to create a third activity, MasterGridActivity for my images which I am using for showing in fragment in GridView.

public class MasterGridActivity extends Fragment {

    Boolean isDualPane;
    GridView gridView;
    ListView listView;
    int position;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.gridview, container, false);

        gridView = (GridView) view.findViewById(R.id.gridViewImage);
        gridView.setAdapter(new MyAdapter(view.getContext()));

        return view;
    }

    @Override
    public void onActivityCreated(Bundle savedInstanceState) {
        View detailFrame = getActivity().findViewById(R.id.detail);

        isDualPane = detailFrame != null && detailFrame.getVisibility() == View.VISIBLE;

        gridView.setOnItemClickListener(new OnItemClickListener() {

            @Override
            public void onItemClick(AdapterView<?> arg0, View arg1, int pos, long arg3) {
                if (!isDualPane) {
                    Intent intent = new Intent();
                    intent.setClass(getActivity(), DetailActivity.class);
                    intent.putExtra("position", pos);
                    startActivity(intent);
                } else {
                    DetailFragment detailFragment = (DetailFragment) getFragmentManager().findFragmentById(R.id.detail);

                    if (detailFragment == null || detailFragment.getIndex() != pos) {

                        detailFragment = new DetailFragment(pos);
                        FragmentTransaction ft = getFragmentManager().beginTransaction();

                        ft.replace(R.id.detail, detailFragment);
                        ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
                        ft.commit();
                    }
                }
            }
        });

        super.onActivityCreated(savedInstanceState);
    }
}

现在这里是我的形象适配器 - MyAdapter - 我的影像延伸一个 BaseAdapter

Now here is my image adapter - MyAdapter - for my images which extends a BaseAdapter.

public class MyAdapter extends BaseAdapter {

    private Context mContext;

    public MyAdapter(Context c) {
        mContext = c;
    }

    @Override
    public int getCount() {
        return mThumbIds.length;
    }

    @Override
    public Object getItem(int arg0) {
        return null;
    }

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

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        ImageView imageView;
        if (convertView == null) { // if it's not recycled, initialize some attributes
            imageView = new ImageView(mContext);
            imageView.setLayoutParams(new GridView.LayoutParams(100, 100));
            imageView.setImageResource(mThumbIds[position]);
            imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
            imageView.setPadding(0, 0, 0, 0);
        } else {
            imageView = (ImageView) convertView;
        }
        imageView.setImageResource(mThumbIds[position]);
        return imageView;
    }

    static Integer[] mThumbIds = { R.drawable.pic1, R.drawable.pic2,
            R.drawable.pic3, R.drawable.pic4, R.drawable.pic5, R.drawable.pic6,
            R.drawable.pic7, R.drawable.pic8, R.drawable.pic9,
            R.drawable.pic10, R.drawable.pic11, R.drawable.pic12,
            R.drawable.pic13,
    };
}

现在我共享XML文件这些片段。

Now I am sharing the XML files for these fragments.

的main.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:orientation="horizontal">

    <fragment
        android:id="@+id/master"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        class="org.fragment.MasterGridActivity" />

</LinearLayout>

gridview.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

  <GridView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/gridViewImage"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:numColumns="auto_fit"
    android:columnWidth="90dp"
    android:horizontalSpacing="10dp"
    android:verticalSpacing="10dp"
    android:gravity="center"
    android:stretchMode="columnWidth" />
</LinearLayout>

detail_fragment.xml :这个XML是表示其他片段中的细节

detail_fragment.xml: This XML is for showing the detail in another fragment.

<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" >

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical" >

        <ImageView
            android:id="@+id/imageView"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:layout_margin="8dp" />

        <TextView
            android:id="@+id/textView"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:padding="8dp" />
    </LinearLayout>
</ScrollView>

detail_act.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:orientation="vertical" >

  <ImageView
        android:id="@+id/imageView1"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:src="@drawable/ic_launcher" />
</LinearLayout>

请同一个XML景观模式和平板电脑。它的工作对我罚款。希望它能对你有所帮助。

Make the same XML for landscape mode and for tablets. It's working fine for me. Hope it will helpful for you.

这篇关于如何显示片段内不同布局的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆