【问题标题】:I could't find IDs of fragment我找不到片段的 ID
【发布时间】:2022-10-07 19:38:29
【问题描述】:

XML 文件

这里是activity_main.xml文件。包含两个片段片段列表.xmlfragment_deatails.xml

<androidx.fragment.app.FragmentContainerView
    android:id=\"@+id/fragmentContainerView\"
    android:name=\"com.udemy.fragmentsapp.ListFrag\"
    android:layout_width=\"0dp\"
    android:layout_height=\"match_parent\"
    android:layout_weight=\"1\"
    tools:layout=\"@layout/fragment_list\" />

<androidx.fragment.app.FragmentContainerView
    android:id=\"@+id/fram2\"
    android:name=\"com.udemy.fragmentsapp.DetailFrag\"
    android:layout_width=\"0dp\"
    android:layout_height=\"match_parent\"
    android:layout_weight=\"2\"
    tools:layout=\"@layout/fragment_detail\" />

这里是片段列表.xml文件。包含列表显示

<ListView
    android:id=\"@+id/lvList\"
    android:layout_width=\"match_parent\"
    android:layout_height=\"match_parent\" />

这里是片段详细信息.xml文件。包含一个文本视图

<TextView
    android:id=\"@+id/tvDescription\"
    android:layout_width=\"wrap_content\"
    android:layout_height=\"wrap_content\"
    android:text=\"@string/textview\"
    android:layout_marginTop=\"20dp\"
    android:layout_marginRight=\"20dp\"
    android:layout_marginLeft=\"20dp\"
    android:textSize=\"18dp\"
    android:textStyle=\"bold\"
    android:textColor=\"@color/black\"/>

Java 文件

这里是ListFrag.java文件。

ItemSelected activity;
public interface ItemSelected
{
    void onItemSelected(int index);
}
public ListFrag() {
    // Required empty public constructor
}

@Override
public void onAttach(@NonNull Context context) {
    super.onAttach(context);
    activity = (ItemSelected) context;
}

@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
    super.onViewCreated(view, savedInstanceState);
    ArrayList<String> data = new ArrayList<>();
    for (int i = 1; i < 6; i++) {
        data.add(i + \". This is item \" + i);
    }
    setListAdapter(new ArrayAdapter<String>(getActivity(), android.R.layout.simple_list_item_1,data));
}

@Override
public void onListItemClick(@NonNull ListView l, @NonNull View v, int position, long id) {
    super.onListItemClick(l, v, position, id);
    activity.onItemSelected(position);
}

这里是DetailFrag.java文件。

public DetailFrag(){
    super(R.layout.fragment_detail);
}

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

@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
    super.onViewCreated(view, savedInstanceState);

}

@Override
public void onAttach(@NonNull Context context) {
    super.onAttach(context);

}

这里是MainActivity.java文件。当我想访问 ID \"tvDescription\" 时,它会显示错误:@layout/activity_main 不包含 ID 为 tvDescription 的声明。

请帮我。如何访问 ID?告诉我哪一种是查找 ID 的方法。

TextView tvDescription;
ArrayList<String> description;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    tvDescription = findViewById(R.id.tvDescription);

    for (int i = 1; i < 6; i++) {
        description.add(\"Description for item \" + i);
    }
}
@Override
public void onItemSelected(int index) {
    tvDescription.setText(description.get(index));

}


请在您的 IDE 中运行此代码。

    标签: java android xml android-fragments findviewbyid


    【解决方案1】:

    问题是您的活动和片段是不同的类。而且虽然很明显它们代表一棵视图树,但实际上,在每个组件类中,您应该只引用其布局的元素。

    因此你需要使用

    TextView tvDescription = findViewById(R.id.tvDescription);
    

    直接在deatailFrag.onViewCreated之后super.onViewCreated

    然后,如有必要,以某种方式将接收到的值传递回活动

    快乐学习

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-02-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-20
      相关资源
      最近更新 更多