如何用另一个片段视图替换当前片段视图

时间:2015-04-06 19:10:10

标签: android android-fragments fragment android-fragmentactivity android-listfragment

我的MainActivity为

listViewFragment = new ListViewFragment();

    getFragmentManager().beginTransaction().add(R.id.fragmentSensors, listViewFragment).commit();

然后我定义了ListViewFragment和ListViewAdapter类,它可以正常工作。

 listViewSensors.setAdapter(new ListViewAdapter(getActivity(), sensorArray));

但是当我定义onClicklistener时,当前视图没有被新的片段视图取代。

这是布局文件。 activity_main

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
    android:layout_height="match_parent"  tools:context=".MainActivity">

    <fragment android:id="@+id/fragmentSensors" android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:name="com.testapp.fragment.ListViewFragment"/>

</RelativeLayout>

listview_fragment

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
    android:layout_height="match_parent"  tools:context=".MainActivity">

    <ListView android:id="@+id/listViewSensors" android:layout_width="match_parent"
        android:layout_height="match_parent"
        />

</LinearLayout>

listview_adapter有imageView和textView。

然后我将test_fragment定义为

<?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">

    <TextView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:text="Hello Test"
        android:id="@+id/textViewTest"/>

</LinearLayout>

并通过ListViewFragment将其作为

进行调用
@Override
    public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
        accelFragment = new AccelFragment();
        testFragment = new TestFragment();

        getFragmentManager().beginTransaction().replace(R.id.fragmentSensors, testFragment).commit();


        Toast.makeText(getActivity(),"Ok", Toast.LENGTH_SHORT).show();
    }

但没有任何反应,我看到Toast弹出窗口。如果我使用android.R.id.content。我在当前listView项目的顶部看到新文本。如果我使用R.id.listViewSensors,我会收到错误 java.lang.UnsupportedOperationException: addView(View) is not supported in AdapterView

3 个答案:

答案 0 :(得分:0)

简单的答案是:你不能

您无法替换在布局文件中定义的任何片段。 您只能通过FragmentTransaction替换动态添加的片段,即创建

答案 1 :(得分:0)

如果视图中有可聚焦项,则不会触发OnClickListener。我必须在activity_main中添加 android:focusable =“false”,如下所示。

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
    android:layout_height="match_parent"  tools:context=".MainActivity"
    android:layout_weight="1"
    >

    <RelativeLayout android:id="@+id/fragmentSensors" android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:name="com.skakade.testsensorapp.fragment.ListViewFragment"
        android:focusable="false"/>

</RelativeLayout>

答案 2 :(得分:0)

查看代码示例@ Google网页Fragments。搜索“公共静态类DetailsFragment extends Fragment ”的文本代码。您可以覆盖方法 onCreateView 。看来你的View有问题。