ListView项目单击打开新的片段错误

时间:2017-07-01 09:35:53

标签: android android-layout listview android-fragments

我有一个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" />

3 个答案:

答案 0 :(得分:2)

传入FragmentTransaction.replace()的ID,在您的情况下为R.id.frag5,必须是活动setContentView()中指定的布局的子级。

因此,例如,如果您的活动有一个名为activity_main.xml的布局,那么R.id.frag5应该是其中的子视图。如果R.id.frag属于不同的布局,则FragmentTransaction.replace()无法识别它,因此,&#34;找不到视图&#34;发生错误。

使用代码示例编辑: -

片段的整个概念是空间的重用(因此,replaceadd函数)!因此,例如,假设我有以下布局activity_main.xml: -

&#13;
&#13;
<?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;
&#13;
&#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的视图的片段。