gpt4 book ai didi

android - 无法通过 ID 或标签找到 fragment ......但它在那里

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

我的主要 Activity 有一个按钮和一个 fragment (注意按钮的 onclick 事件分配在这里:

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">

<Button
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="184dp"
android:text="Button"
android:onClick="onButtonClicked"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" />

<fragment
android:id="@+id/fragment"
android:name="com.example.steve.fragmentdemo.MyFragment"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="8dp"
android:layout_marginTop="8dp"
app:layout_constraintBottom_toTopOf="@+id/button"
app:layout_constraintTop_toTopOf="parent"
tools:layout_editor_absoluteX="159dp" />

</android.support.constraint.ConstraintLayout>

该 fragment 有一个 TextView 、一个 id 和一个标签:

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="100dp"
tools:context=".MyFragment"
android:id="@+id/myFragmentId"
android:tag="myFragmentTag"
>

<TextView
android:id="@+id/myTextView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Soon to be overwritten" />

</FrameLayout>

fragment 有一个公共(public)函数来写入 TextView :

public class MyFragment extends Fragment {

public MyFragment() {
// Required empty public constructor
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
return inflater.inflate(R.layout.fragment_my, container, false);
}

public void setText(String theText){
TextView text = getView().findViewById(R.id.myTextView);

text.setText(theText);
}
}

主要 Activity 可以到达 fragment ,但只能通过 fragment 列表!

public class MainActivity extends AppCompatActivity {

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

public void onButtonClicked(View view)
{
FragmentManager supportFragmentManager = getSupportFragmentManager();

MyFragment frameLayout;

frameLayout = (MyFragment)supportFragmentManager.findFragmentById(R.id.myFragmentId);
// Nope find by ID failed

frameLayout = (MyFragment)supportFragmentManager.findFragmentByTag("myFragmentTag");
// Nope find by tag failed

List<Fragment> myList = supportFragmentManager.getFragments();

frameLayout = (MyFragment)myList.get(0);

// And yet, the fragment is in the list of fragments
if (frameLayout != null)
frameLayout.setText("Hi There"); // this worked!
}
}

什么给了?

仅供引用:我是一名经验丰富的开发人员,我学习 Android 是为了好玩......这有多恶心?

最佳答案

此处的 id 应该是包含 fragment 而不是一个实际 fragment 的布局。因此,真正的id应该是“fragment”。

关于android - 无法通过 ID 或标签找到 fragment ......但它在那里,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49848696/

25 4 0