gpt4 book ai didi

java - 使用 findViewById 设置 Fragment 类中 Textview 上的 Bundle 中的文本时出现 NullPointerException

转载 作者:行者123 更新时间:2023-12-02 03:24:19 26 4
gpt4 key购买 nike

我在各种网站和堆栈溢出问题上研究了这个问题,但我找不到解决我的问题的解决方案。我已经为这个问题苦苦挣扎了一段时间,但就是无法解决..

我有两个 Activity 和一个 fragment 。第一个 Activity(概述)应在 t 的 onCreate 中添加 Fragment,其文本与默认文本不同。第二个 Activity (AddCity) 使用 Intent 和 Bundle 将此文本数据发送到 Overview。在概述中,数据可用,我将其发送到 fragment myfragment.setArguments(bundle) ,但是当我尝试使用 Bundle bundle = getArguments() 访问 onCreateView 中的 Textview 时我收到以下错误:

FATAL EXCEPTION: main
Process: com.myapp.www, PID: 19690
java.lang.NullPointerException: Attempt to invoke virtual method 'android.view.View android.view.View.findViewById(int)' on a null object reference

异常发生在 StatusFragment 中的以下行:

TextView cityText = (TextView) getView().findViewById(R.id.city_name);

我已经尝试过使用自己的构造函数的方法,但据我所知,除了 fragment 中的空默认构造函数之外,您应该避免使用自定义构造函数,而且它也不起作用。

我的类(class)是:

概述:

protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_overview);

Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
getSupportActionBar().setIcon(R.drawable.myicon);
// Create the adapter that will return a fragment for each of the three
// primary sections of the activity.
mSectionsPagerAdapter = new SectionsPagerAdapter(getSupportFragmentManager());

// Set up the ViewPager with the sections adapter.
mViewPager = (ViewPager) findViewById(R.id.container);

if(getIntent().getExtras() != null){
Bundle extras = getIntent().getExtras();

StatusFragment newFragment = new StatusFragment();
newFragment.setArguments(extras);

mSectionsPagerAdapter.addFragment(newFragment, extras.getString("city"));
}else{
Log.w("Overview-Bundle", "No Bundle Data");
}

mViewPager.setAdapter(mSectionsPagerAdapter);
}

添加城市:

此类使用一种方法来接收 JSON 字符串并解析它以获取我需要发送到 fragment 的数据。这工作得很好,所以我只给出了将 Intent 组合在一起的相关代码。 obj 是 JSON 对象。 (如果您需要更多代码,请告诉我)

Intent i = new Intent(AddCity.this, Overview.class);
Bundle bundle = new Bundle();
bundle.putString("city", obj.getString("user_city"));
bundle.putString("country", obj.getString("user_ country"));
i.putExtras(bundle);
startActivity(i);

状态 fragment :

public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_for_overview, null);

setUI(view);

return view;
}

public void setUI(View view){
if(getArguments() != null) {

Bundle bundle = getArguments();

String city = bundle.getString("city");
String country = bundle.getString("country");

TextView cityText = (TextView) getView().findViewById(R.id.city_name);
TextView countryText = (TextView) getView().findViewById(R.id.country_name);

cityText.setText(city);
countryText.setText(country);

}else{
Log.w("Arguments", "no arguments");
}
}

我将不胜感激每一个答案。让我知道是否应该发布更多代码。

最佳答案

您在 onCreateView() 返回之前调用 getView(),因此是空指针。对于您的情况,您只需调用:

public void setUI(View view){
...
TextView cityText = (TextView) view.findViewById(R.id.city_name);
...
}

关于java - 使用 findViewById 设置 Fragment 类中 Textview 上的 Bundle 中的文本时出现 NullPointerException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39183716/

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