Я пытаюсь заменить существующий фрагмент на другой фрагмент. Я использую FrameLayout, чтобы я мог обменивать фрагменты.NullPointerException - Замена фрагмента в FrameLayout
Я должен установить некоторые данные в новый фрагмент, прежде чем показывать его. Но я получаю исключение NullPointerException.
Я довольно новичок в Фрагментах, поэтому, пожалуйста, помогите мне с этим. Я посмотрел на другие вопросы на SO, но я не мог решить мою проблему
Logcat :::
12-14 19:15:08.577: E/AndroidRuntime(10726): FATAL EXCEPTION: main
12-14 19:15:08.577: E/AndroidRuntime(10726): java.lang.NullPointerException
12-14 19:15:08.577: E/AndroidRuntime(10726): at com.xx.xxx.wallet.WalletNotRedeemedFragment.setParameters(WalletNotRedeemedFragment.java:29)
12-14 19:15:08.577: E/AndroidRuntime(10726): at com.xx.xxx.wallet.WalletListActivity.onWalletListItemClick(WalletListActivity.java:70)
12-14 19:15:08.577: E/AndroidRuntime(10726): at com.xx.xxx.wallet.WalletListFragment$1.onItemClick(WalletListFragment.java:108)
12-14 19:15:08.577: E/AndroidRuntime(10726): at android.widget.AdapterView.performItemClick(AdapterView.java:298)
12-14 19:15:08.577: E/AndroidRuntime(10726): at android.widget.AbsListView.performItemClick(AbsListView.java:1100)
12-14 19:15:08.577: E/AndroidRuntime(10726): at android.widget.AbsListView$PerformClick.run(AbsListView.java:2788)
12-14 19:15:08.577: E/AndroidRuntime(10726): at android.widget.AbsListView$1.run(AbsListView.java:3463)
12-14 19:15:08.577: E/AndroidRuntime(10726): at android.os.Handler.handleCallback(Handler.java:730)
12-14 19:15:08.577: E/AndroidRuntime(10726): at android.os.Handler.dispatchMessage(Handler.java:92)
12-14 19:15:08.577: E/AndroidRuntime(10726): at android.os.Looper.loop(Looper.java:137)
12-14 19:15:08.577: E/AndroidRuntime(10726): at android.app.ActivityThread.main(ActivityThread.java:5103)
12-14 19:15:08.577: E/AndroidRuntime(10726): at java.lang.reflect.Method.invokeNative(Native Method)
12-14 19:15:08.577: E/AndroidRuntime(10726): at java.lang.reflect.Method.invoke(Method.java:525)
12-14 19:15:08.577: E/AndroidRuntime(10726): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)
12-14 19:15:08.577: E/AndroidRuntime(10726): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
12-14 19:15:08.577: E/AndroidRuntime(10726): at dalvik.system.NativeStart.main(Native Method)
Пожалуйста, посмотрите на код ниже ...
Bundle bundle = new Bundle();
bundle.putString("imagepath", imagePath);
bundle.putString("title", title);
bundle.putString("desc", desc);
WalletNotRedeemedFragment frag = new WalletNotRedeemedFragment();
frag.setParameters(bundle);
getSupportFragmentManager().beginTransaction()
.replace(R.id.wallet_detail_container, frag).commit();
WalletNotRedeemed .java
public class WalletNotRedeemedFragment extends SherlockFragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_wallet_not_redeemed,
container, false);
return view;
}
public void setParameters(Bundle bundle) {
// Null Pointer Exception here...
TextView title = (TextView) getView().findViewById(
R.id.textview_coupon_title_nr);
title.setText(bundle.getString("title"));
TextView desc = (TextView) getView().findViewById(
R.id.textview_coupon_description_nr);
desc.setText(bundle.getString("desc"));
ImageView image = (ImageView) getView().findViewById(
R.id.imageview_coupon_image_nr);
image.setImageURI(Uri.parse(bundle.getString("imagepath")));
}
}
Из того, что я понял, рассматривая другие вопросы, является то, что фрагмент еще не загружен, и, следовательно, я получаю исключение NullPointerException, когда я пытаюсь получить доступ к TextView, но я не уверен, как заставить его работать.
Ваша помощь очень ценится .. спасибо !!!
Ответ :::
Я думаю, я получил его на работу .. но, это не может быть лучшим способом ...
Вот что я сделал ...
public class WalletNotRedeemedFragment extends SherlockFragment {
TextView title, desc;
ImageView image;
String strTitle, strDesc, strImage;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_wallet_not_redeemed,
container, false);
title = (TextView) view.findViewById(R.id.textview_coupon_title_nr);
title.setText(strTitle);
desc = (TextView) view
.findViewById(R.id.textview_coupon_description_nr);
desc.setText(strDesc);
image = (ImageView) view.findViewById(R.id.imageview_coupon_image_nr);
image.setImageURI(Uri.parse(strImage));
return view;
}
public void setParameters(Bundle bundle) {
strTitle = bundle.getString("title");
strDesc = bundle.getString("desc");
strImage = bundle.getString("imagepath");
}
}
Спасибо за вашу помощь .. Я сделал это для работы, как я мог, это может быть не самое лучшее, но на данный момент я работаю с ним. –
Извините, но теперь см. мой обновленный ответ по строчке ... прежде чем я назвал название.SetText (bundle.getString ("название")); desc.setText (bundle.getString ("desc")); image.setImageURI (Uri.parse (bundle.getString ("путь к изображению"))); также в методе onCreateView(). – Piyush