Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android java.lang.IllegalArgumentException:找不到的视图_Android_Android Layout_Android Fragments_Android Activity - Fatal编程技术网

Android java.lang.IllegalArgumentException:找不到的视图

Android java.lang.IllegalArgumentException:找不到的视图,android,android-layout,android-fragments,android-activity,Android,Android Layout,Android Fragments,Android Activity,我正在尝试做什么:从主/细节流项目开始,我尝试使用户能够按下ActionMenu中的一个项目,该项目应该显示一个片段,其中可以放入新数据 问题:我尝试启动片段时出错。我做错了什么 粘贴代码后,我想我把它弄得一团糟。仍然需要帮助 错误: java.lang.IllegalArgumentException:未找到片段AddItem{5b161e7#1 id=0x7f090040}的id 0x7f090040(com.example.androidtest:id/AddItem_fragment)的

我正在尝试做什么:从主/细节流项目开始,我尝试使用户能够按下ActionMenu中的一个项目,该项目应该显示一个片段,其中可以放入新数据

问题:我尝试启动片段时出错。我做错了什么

粘贴代码后,我想我把它弄得一团糟。仍然需要帮助

错误:

java.lang.IllegalArgumentException:未找到片段AddItem{5b161e7#1 id=0x7f090040}的id 0x7f090040(com.example.androidtest:id/AddItem_fragment)的视图

ItemListActivity.java:

public class ItemListActivity extends ActionBarActivity implements
    ItemListFragment.Callbacks {

private boolean mTwoPane;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_item_list);

    if (findViewById(R.id.item_detail_container) != null) {
        mTwoPane = true;
        ((ItemListFragment) getSupportFragmentManager().findFragmentById(
                R.id.item_list)).setActivateOnItemClick(true);
    }


}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.activity_actions, menu);
    setTitle("Shoppinglistan");
    return super.onCreateOptionsMenu(menu);
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {

    switch (item.getItemId()) {
        case R.id.action_add:
            openAddItem();
            return true;
        case R.id.action_send:
            //openSettings();
            return true;
        default:
            return super.onOptionsItemSelected(item);
    }
}

@Override
public void onItemSelected(String id) {
    if (mTwoPane) {
        Bundle arguments = new Bundle();
        arguments.putString(ItemDetailFragment.ARG_ITEM_ID, id);
        ItemDetailFragment fragment = new ItemDetailFragment();
        fragment.setArguments(arguments);
        getSupportFragmentManager().beginTransaction()
                .replace(R.id.item_detail_container, fragment).commit();            

    } else {
        Intent detailIntent = new Intent(this, ItemDetailActivity.class);
        detailIntent.putExtra(ItemDetailFragment.ARG_ITEM_ID, id);
        startActivity(detailIntent);
    }
}

public void openAddItem() {
    AddItem additem = new AddItem();
    getSupportFragmentManager().beginTransaction()
    .add(R.id.AddItem_fragment, additem).commit();
}

public static class AddItem extends Fragment {
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {

        // Inflate the layout for this fragment
        View rootView = inflater.inflate(R.layout.additem_layout,
                container, false);
        return rootView;
    }
}
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/item_detail_container"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.example.androidtest.ItemDetailActivity"
tools:ignore="MergeRootFrame" >

    <fragment 
    android:name="com.example.androidtest.AddItem"
    android:id="@+id/AddItem_fragment"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_marginLeft="16dp"
    android:layout_marginRight="16dp" 

    />

</FrameLayout>
<?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="vertical" >

<TextView
    android:id="@+id/textView1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Large Text"
    android:textAppearance="?android:attr/textAppearanceLarge" />

</LinearLayout>
}

activity\u item\u detail.xml:

public class ItemListActivity extends ActionBarActivity implements
    ItemListFragment.Callbacks {

private boolean mTwoPane;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_item_list);

    if (findViewById(R.id.item_detail_container) != null) {
        mTwoPane = true;
        ((ItemListFragment) getSupportFragmentManager().findFragmentById(
                R.id.item_list)).setActivateOnItemClick(true);
    }


}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.activity_actions, menu);
    setTitle("Shoppinglistan");
    return super.onCreateOptionsMenu(menu);
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {

    switch (item.getItemId()) {
        case R.id.action_add:
            openAddItem();
            return true;
        case R.id.action_send:
            //openSettings();
            return true;
        default:
            return super.onOptionsItemSelected(item);
    }
}

@Override
public void onItemSelected(String id) {
    if (mTwoPane) {
        Bundle arguments = new Bundle();
        arguments.putString(ItemDetailFragment.ARG_ITEM_ID, id);
        ItemDetailFragment fragment = new ItemDetailFragment();
        fragment.setArguments(arguments);
        getSupportFragmentManager().beginTransaction()
                .replace(R.id.item_detail_container, fragment).commit();            

    } else {
        Intent detailIntent = new Intent(this, ItemDetailActivity.class);
        detailIntent.putExtra(ItemDetailFragment.ARG_ITEM_ID, id);
        startActivity(detailIntent);
    }
}

public void openAddItem() {
    AddItem additem = new AddItem();
    getSupportFragmentManager().beginTransaction()
    .add(R.id.AddItem_fragment, additem).commit();
}

public static class AddItem extends Fragment {
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {

        // Inflate the layout for this fragment
        View rootView = inflater.inflate(R.layout.additem_layout,
                container, false);
        return rootView;
    }
}
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/item_detail_container"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.example.androidtest.ItemDetailActivity"
tools:ignore="MergeRootFrame" >

    <fragment 
    android:name="com.example.androidtest.AddItem"
    android:id="@+id/AddItem_fragment"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_marginLeft="16dp"
    android:layout_marginRight="16dp" 

    />

</FrameLayout>
<?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="vertical" >

<TextView
    android:id="@+id/textView1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Large Text"
    android:textAppearance="?android:attr/textAppearanceLarge" />

</LinearLayout>

附加项布局:

public class ItemListActivity extends ActionBarActivity implements
    ItemListFragment.Callbacks {

private boolean mTwoPane;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_item_list);

    if (findViewById(R.id.item_detail_container) != null) {
        mTwoPane = true;
        ((ItemListFragment) getSupportFragmentManager().findFragmentById(
                R.id.item_list)).setActivateOnItemClick(true);
    }


}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.activity_actions, menu);
    setTitle("Shoppinglistan");
    return super.onCreateOptionsMenu(menu);
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {

    switch (item.getItemId()) {
        case R.id.action_add:
            openAddItem();
            return true;
        case R.id.action_send:
            //openSettings();
            return true;
        default:
            return super.onOptionsItemSelected(item);
    }
}

@Override
public void onItemSelected(String id) {
    if (mTwoPane) {
        Bundle arguments = new Bundle();
        arguments.putString(ItemDetailFragment.ARG_ITEM_ID, id);
        ItemDetailFragment fragment = new ItemDetailFragment();
        fragment.setArguments(arguments);
        getSupportFragmentManager().beginTransaction()
                .replace(R.id.item_detail_container, fragment).commit();            

    } else {
        Intent detailIntent = new Intent(this, ItemDetailActivity.class);
        detailIntent.putExtra(ItemDetailFragment.ARG_ITEM_ID, id);
        startActivity(detailIntent);
    }
}

public void openAddItem() {
    AddItem additem = new AddItem();
    getSupportFragmentManager().beginTransaction()
    .add(R.id.AddItem_fragment, additem).commit();
}

public static class AddItem extends Fragment {
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {

        // Inflate the layout for this fragment
        View rootView = inflater.inflate(R.layout.additem_layout,
                container, false);
        return rootView;
    }
}
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/item_detail_container"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.example.androidtest.ItemDetailActivity"
tools:ignore="MergeRootFrame" >

    <fragment 
    android:name="com.example.androidtest.AddItem"
    android:id="@+id/AddItem_fragment"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_marginLeft="16dp"
    android:layout_marginRight="16dp" 

    />

</FrameLayout>
<?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="vertical" >

<TextView
    android:id="@+id/textView1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Large Text"
    android:textAppearance="?android:attr/textAppearanceLarge" />

</LinearLayout>

从文档中,添加方法:

抽象碎片事务添加(int-containerViewId,碎片碎片)

使用空标记调用add(int、Fragment、String)

在代码中:

public void openAddItem() {
    AddItem additem = new AddItem();
    getSupportFragmentManager().beginTransaction().add(R.id.AddItem_fragment, additem).commit();
}

此代码将在您的视图中找到一个id为
R.id.AddItem\u frament
的视图,并尝试将与传递的片段关联的视图附加到该视图上。由于在您的布局中没有用作容器的
视图组
,因此它正在启动一个合法的
IllegalArgumentException
,因为id不存在。您需要做的是提供一个容器,您可以在其中添加所有片段并将此id传递给事务的add方法。

您的问题是这一行

public void openAddItem() {
AddItem additem = new AddItem();
getSupportFragmentManager().beginTransaction()
.add(R.id.AddItem_fragment, additem).commit();
}
你已经在这里了

 <fragment 
android:name="com.example.androidtest.AddItem"
android:id="@+id/AddItem_fragment"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginLeft="16dp"
android:layout_marginRight="16dp" 
/>

希望它足够好

你觉得Actionmenu怎么样?你的意思是?你的片段容器在哪里?通过“提供容器”你的意思是像在fragment.xml中创建RelativeLayout一样吗?我的意思是提供一个视图组,可以是任何RelativeLayout、LinearLayout、FrameLayout。。。使用id AddItem_fragmentI,我尝试像您所说的那样删除上面的代码,异常消失了,但当我按下按钮(触发片段的打开)时,什么也没有发生。也许我搞糟了什么?检查我的编辑,先生,如果它帮助了你,别忘了投票,如果它解决了你所有的问题,请接受@riki oh