我的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
答案 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有问题。