android-fragments 如何访问片段元素的ID(如:文本视图、编辑文本等)

pcrecxhr  于 2022-11-13  发布在  Android
关注(0)|答案(1)|浏览(203)

这是Fragment.xml文件,我创建了一些元素(如TextView和ImageView),并为这些元素分配了ID。
以下是Fragment.java文件。

TextView tvName,tvTel;

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

这是MainActivity.java文件。我想访问Fragment.xml文件的ID。在MainActivity.java文件中。但我无法访问ID。它显示错误。我卡住了。我尝试了很多次。但没有解决。我认为这是旧版本访问ID。但我不知道如何才能在新版本中访问ID。
错误:@layout/activity_main不包含ID为tvName的声明。

TextView tvName,tvTel;
 EditText etName,etTel;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    tvName = findViewById(R.id.tvName);
    tvTel = findViewById(R.id.tvTel);

    etName = findViewById(R.id.etName);
    etTel = findViewById(R.id.etTel);
}

请帮助我,我如何才能访问ID。

wgx48brx

wgx48brx1#

通常情况下,你不需要这样做。如果你想与主机Activity通信,你可以使用片段中的onAttach方法,或者简单地使用requireActivity()

public class MyFragment extends Fragment {

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

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

        return view;
    }

    @Override
    public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);
        
        TextView tvName = view.findViewById(R.id.tvName);
        TextView tvTel = view.findViewById(R.id.tvTel);

        TextView etName = view.findViewById(R.id.etName);
        TextView etTel = view.findViewById(R.id.etTel);

        MainActivity activity = (MainActivity) requireActivity();
        

        tvName.setText(activity.sameFields);
        activity.someMethods();
    }

    @Override
    public void onAttach(@NonNull Context context) {
        super.onAttach(context);
        if ((context instanceof MainActivity)) {
            MainActivity activity = (MainActivity) context;
            activity.someMethods();
        }
    }
}

相关问题