gpt4 book ai didi

java - 无法显示 fragment ,找不到 ID 的 View

转载 作者:行者123 更新时间:2023-11-30 02:52:02 25 4
gpt4 key购买 nike

我正在尝试获取一个 fragment 来显示它包含一个 EditText 和一个按钮。我刚开始使用 fragment ,所以我不确定在尝试创建 fragment 时收到的错误消息到底是什么意思。

我有一个扩展 Fragment 的类,这是创建 EditText 和按钮的地方。

public class EditNameFragment extends android.support.v4.app.Fragment {


EditText editText;
ImageButton button;

public EditNameFragment(){

}


@Override
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
}


@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {

View view = inflater.inflate(R.layout.edit_name_dialog, container, false);

editText = (EditText) view.findViewById(R.id.editTextDialog);
button = (ImageButton) view.findViewById(R.id.submitNewItemButtonDialog);

button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//stuff
}
});

return view;

}

这里是 edit_name_dialog.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal" android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="center"
android:id="@+id/edit_name_dialog"
>

<EditText
android:id="@+id/editTextDialog"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>

<ImageButton
android:id="@+id/submitNewItemButtonDialog"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
/>


</LinearLayout>

在我的主要 Activity 中(由于另一部分,它必须扩展 FragmentActivity)是我尝试设置我的 fragment 的地方。我认为这与我引用的 id 有关。 我看到有人在使用fragment的时候使用了容器类,但是我不明白为什么要这样做。

 FragmentManager fragmentManager = getSupportFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();

EditNameFragment fragment = new EditNameFragment();
fragmentTransaction.add(R.id.edit_name_dialog, fragment, "tag");


fragmentTransaction.commit();

我在尝试运行上面的代码时收到错误消息

No view found for id 0x7f09002a (com.myapp:id/edit_name_dialog) for fragment EditNameFragment

如果有人能解释我在这里遗漏了什么/为什么人们使用容器类,那就太好了。我知道有些人使用 XML 添加 fragment ,但我只想使用 java 来添加 fragment 。

编辑

我添加了一个扩展 FragmentActivity 的类,遵循容器类的模型

public class EditNameFragmentActivity extends FragmentActivity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

setContentView(R.layout.edit_name_fragment_container);
}
}

setContentView 的参数应该是布局,还是id?这是定义 fragment 位置的 xml 文件

edit_name_fragment_container.xml

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

<fragment android:name="com.returnjump.spoilfoil.EditNameFragment"
android:id="@+id/edit_name_fragment_container"
android:layout_weight="1"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:layout="@layout/edit_name_fragment" />

</LinearLayout>

所以对于中的参数

fragmentTransaction.add(R.id.edit_name_dialog, fragment, "tag");

这应该引用 fragment 的 ID,对吗?

它仍然给我同样的错误,我错过了什么?

最佳答案

基本上有两种方法可以将 fragment 添加到 Activity 中,如文档所述:

  • “静态”:通过在 Activity 的布局文件中声明 fragment 。
  • “动态”:以编程方式添加 fragment 。就像您尝试做的那样。

这是文档:http://developer.android.com/guide/components/fragments.html

如果你想动态添加它,这里是你想阅读的文档部分:

At any time while your activity is running, you can add fragments to your activity layout. You simply need to specify a ViewGroup in which to place the fragment. To make fragment transactions in your activity (such as add, remove, or replace a fragment), you must use APIs from FragmentTransaction. You can get an instance of FragmentTransaction from your Activity like this:

FragmentManager fragmentManager = getFragmentManager()
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();

You can then add a fragment using the add() method, specifying the fragment to add and the view in which to insert it. For example:

ExampleFragment fragment = new ExampleFragment();
fragmentTransaction.add(R.id.fragment_container, fragment);
fragmentTransaction.commit();

The first argument passed to add() is the ViewGroup in which the fragment should be placed, specified by resource ID, and the second parameter is the fragment to add. Once you've made your changes with FragmentTransaction, you must call commit() for the changes to take effect.

关于为什么使用动态 fragment 而不是静态 fragment ,它是为交互式 UI 制作的,允许您根据需要将不同的 fragment 简单地处理到一个 Activity 中。

关于java - 无法显示 fragment ,找不到 ID 的 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23984165/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com