点击一个按钮,打开一个片段? [英] Click a button to open a Fragment?

查看:128
本文介绍了点击一个按钮,打开一个片段?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个ViewPager中,我能4种不同的标签(这是片段),我创建的查看。在我的片段中的一个,我想有一个会,当我点击网页上的一个按钮,替换另一个片段该视图按钮。现在我不想刷卡到另一个选项卡,我只知道一味要替换当前片段的视图时,我preSS该按钮。这里是我的尝试,但我不知道为什么,当我点击我的按钮,没有任何反应。如果有人可以帮助我,将是巨大的。谢谢!

I have a ViewPager in which I am able to view between 4 different tabs (which are fragments) I created. In one of my fragments, I want to have a button that will, after I click a button on that page, replace that view with another fragment. Now I don't want to swipe to another tab, I just merely want to replace the view of the current fragment when I press that button. Here is my attempt, but I'm not sure why when I click my button, nothing happens. If anyone could help me that would be great. Thanks!

这是我片段呼吁创造preSS我想要的视图和按钮。

This is the Fragment I call to create the view and the button I want to press.

ManualSelection.java

ManualSelection.java

public class ManualSelection extends Fragment {

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

        // Inflate the layout for this fragment
        View rootView = inflater.inflate(R.layout.activity_manual_selection, container, false);
        intent = new Intent(getActivity(), ManualSelectionListView.class);
        return rootView;
    }

    public void onActivityCreated (Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
        Button listViewGenerated = (Button) getActivity().findViewById(R.id.manual_generate);
        listViewGenerated.setOnClickListener(new View.OnClickListener() {
            @TargetApi(Build.VERSION_CODES.HONEYCOMB)
            @Override
            public void onClick(View v) {
                FragmentManager fm = getActivity().getFragmentManager();
                FragmentTransaction ft = fm.beginTransaction();
                ft.replace(R.id.listView_manual, new ManualSelectionListView());
                ft.commit();
            }

        });
    }
}

这里是我要创建的片段

And here is the Fragment I want to create

ManualSelectionListView.java

ManualSelectionListView.java

@TargetApi(Build.VERSION_CODES.HONEYCOMB)
public class ManualSelectionListView extends Fragment {

static final String[] MOBILE_OS =
        new String[] { "Android", "iOS", "WindowsMobile", "Blackberry"};

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    // Inflate the layout for this fragment
    View rootView = inflater.inflate(R.layout.listview, container, false);

    ListView lv = (ListView)rootView.findViewById(R.id.listview);
    lv.setAdapter(new MobileArrayAdapter(getActivity(),MOBILE_OS));

    return rootView;
}
}

这是我的XML文件:

activity_manual_selection.xml

activity_manual_selection.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="wrap_content"
    android:layout_height="match_parent"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:paddingBottom="@dimen/activity_vertical_margin"
    tools:context="com.ecs160.homestay.ManualSelection"
    android:id="@+id/fragmentTest"> 

 <Button
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Generate"
    android:id="@+id/manual_generate"
    android:layout_centerHorizontal="true"
    android:onClick="generateListView"/>

这是包含XML文件名为listview.xml R.id.listView_manual

And here is the XML file called listview.xml that contains R.id.listView_manual

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:id="@+id/listView_manual">

<ListView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/listview"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" />

</LinearLayout>

我什么也没有显示时,我打生成。有任何想法吗?谢谢!

I get nothing displayed when I hit "Generate." Any ideas? Thanks!

推荐答案

的问题是,你想从你的主要活动按钮的ID,这将返回null

The problem is that you are trying to get the Button id from your main activity which will return null

        Button listViewGenerated = (Button) getActivity().findViewById(R.id.manual_generate);

按钮 manual_generate 位于您的 activity_manual_selection 布局不是在你的主要业务的布局,你不能从不同的布局视图否则将返回null

Button manual_generate is located in your activity_manual_selection layout not in your Main activity's layout you cant get view from different layout or else it will return null

解决方案:

从你的片段布局获取按钮的id

Get the Button's id from your fragment's layout

public class ManualSelection extends Fragment {

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

    // Inflate the layout for this fragment
    View rootView = inflater.inflate(R.layout.activity_manual_selection, container, false);
    intent = new Intent(getActivity(), ManualSelectionListView.class);

   Button listViewGenerated = (Button) rootView.findViewById(R.id.manual_generate);
    listViewGenerated.setOnClickListener(new View.OnClickListener() {
        @TargetApi(Build.VERSION_CODES.HONEYCOMB)
        @Override
        public void onClick(View v) {
            FragmentManager fm = getActivity().getFragmentManager();
            FragmentTransaction ft = fm.beginTransaction();
            ft.replace(R.id.listView_manual, new ManualSelectionListView());
            ft.commit();
        }

    });

    return rootView;
}

删除 onActivityCreated

这篇关于点击一个按钮,打开一个片段?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

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