我有一个ListView。如果我点击列表视图中的第一个元素(位于0位置),我希望打开一个新片段。但是我收到了这个错误
找不到ID为0x7f0d00a8(com.example.user.app:id/frag5)的片段Fragment6 {11a5bdd4#0 id = 0x7f0d00a8}
我这几天都在尝试,但我没有得到我做错的事。我真的只是想在我单击ListView项目时打开Fragment6。而已。我很惊讶这与其他事情形成鲜明对比。我在6个月前开始开发应用程序,我处理了很多东西,但在这里我有点绝望。我希望你能在这里帮助我。
这是我的ListView方法:
// ListView Item Click Listener
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
// ListView Clicked item index
int itemPosition = position;
// ListView Clicked item value
String itemValue = (String) listView.getItemAtPosition(position);
// Show Alert
Toast.makeText(getApplicationContext(),
"Position :"+itemPosition+" ListItem : " +itemValue , Toast.LENGTH_LONG)
.show();
if(position==0 ) {
Fragment6 frag6 = null;
frag6 = new Fragment6();
FragmentManager fragmentManager = getSupportFragmentManager();
fragmentManager.beginTransaction()
.replace(R.id.frag5, frag6)
.commit();
}
}
});
这是我的Fragment6。的java
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
public class Fragment6 extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
ViewGroup rootView = (ViewGroup) inflater.inflate(
R.layout.fragmentdescrip6, container, false);
return rootView;
}
}
以下是名为fragmentdescrip6
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/frag6"
>
<TextView
android:id="@+id/textfrag6label"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Header:"
android:textStyle="bold"
android:textColor="#FFFF4444"
android:textSize="20dp"
android:layout_marginTop="17dp"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true" />
<TextView
android:id="@+id/textfrag6"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_below="@+id/textfrag6label"
android:layout_marginLeft="16dp"
android:layout_marginStart="16dp"
android:layout_marginTop="33dp"
android:textStyle="bold"
android:text="some text " />
这是具有id“frag5”
的布局<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/frag5"
>
<TextView
android:id="@+id/textfrag5label"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Header:"
android:textStyle="bold"
android:textColor="#FFFF4444"
android:textSize="20dp"
android:layout_marginTop="17dp"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true" />
/>
<TextView
android:id="@+id/textfrag5"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="42dp"
android:textStyle="bold"
android:text="textt"
android:layout_below="@+id/textfrag5label"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true" />
编辑:activity_explain布局,这是我的ListView类的布局
<?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">
<ListView
android:id="@+id/list"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_margin="2dp"
android:layout_weight=".50" />
答案 0 :(得分:2)
传入FragmentTransaction.replace()
的ID,在您的情况下为R.id.frag5
,必须是活动setContentView()
中指定的布局的子级。
因此,例如,如果您的活动有一个名为activity_main.xml
的布局,那么R.id.frag5
应该是其中的子视图。如果R.id.frag
属于不同的布局,则FragmentTransaction.replace()
无法识别它,因此,&#34;找不到视图&#34;发生错误。
使用代码示例编辑: -
片段的整个概念是空间的重用(因此,replace
或add
函数)!因此,例如,假设我有以下布局activity_main.xml
: -
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">
<FrameLayout
android:layout_width="100dp"
android:layout_height="100dp"
android:id="@+id/flbase"></FrameLayout>
<TextView
android:layout_width="100dp"
android:layout_height="100dp"
android:text="Hello!"/>
</LinearLayout>
&#13;
现在,从我的主要活动中,我可以调用以下代码: -
Fragment fragToReplace = new Fragment();
FragmentManager fragmentManager = getSupportFragmentManager()
fragmentManager.beginTransaction()
.replace(R.id.flbase,fragToReplace)
.commit();
答案 1 :(得分:0)
Fragment
中没有构造函数。 Fragment
始终需要空构造函数。
请在Fragment6
public Fragment6() {
// Required empty public constructor
}
答案 2 :(得分:0)
我发现了你的问题。您正在尝试将片段替换为尚未添加到“活动”的另一个片段的子视图。这肯定会导致 java.lang.IllegalArgumentException:找不到id 异常的视图。在将片段替换为片段之前,尝试检查是否添加了包含id为R.id.frag5的视图的片段。