在Activity中的片段中设置TextView

阿卜杜勒·瓦萨(Abdul Wasae)

我一直在尝试从实例化片段的活动代码在片段布局内的textView中设置文本。我得到了NullPointerException。已经好几天了,无法修复。

我尝试了几种方法来将数据从活动传递到片段... 1.)我首先在活动中添加了片段。然后尝试在活动布局中使用FindViewByID()访问相应的textView(最初是在片段布局中)(假设它现在是我活动的一部分)。我有NPE。2.)我在Fragment类中创建了setter方法。然后,我尝试从活动类代码中调用此方法。这也提供了NPE。

步骤2的代码如下。请帮助我我在做什么错。

活动代码

public class DetailsActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_details);
        // Show the Up button in the action bar.
        setupActionBar();



        //attach fragment
        Details_fragment detailsFrag = new Details_fragment(); //initializes any fragments that may be used
        //data is coming from the previous activity
        Intent intent = getIntent();
        NewsData temp = new NewsData();
        temp.setHeadline(intent.getStringExtra("headline"));
        temp.setDetails(intent.getStringExtra("details"));
        temp.setImage_source(intent.getIntExtra("img_source", 1));

        detailsFrag.setDisplay_data(temp); //ERRONEOUS TODO

        FragmentManager fManager = getFragmentManager(); //prepare fragment manager
        FragmentTransaction fTransaction = fManager.beginTransaction();

        // Add fragments using fTransaction and then commit
        fTransaction.add(R.id.details_activity_container, detailsFrag, "frag_tag");
        fTransaction.commit();

        //get data from intent
        //set data in fragment views by using the setter of fragment



    }

}

**错误在这行:**detailsFrag.setDisplay_data(temp); //ERRONEOUS TODO即当我将其注释掉时,我的应用程序不会崩溃。注意:我什至试图在提交片段事务之后放置这些数据设置代码行。相同错误NPE

片段代码

public class Details_fragment extends Fragment {

    NewsData display_data;


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

        display_data = new NewsData();
        View view =  inflater.inflate(R.layout.details, container, false);

        return view;

    }



    public NewsData getDisplay_data() {
        return display_data;
    }


public void setDisplay_data(NewsData display_data) {
        this.display_data = display_data;

        TextView headline = (TextView) getView().findViewById(R.id.details_headline_view);
        headline.setText(display_data.getHeadline());
        TextView detail = (TextView) getView().findViewById(R.id.details_details_view);
        detail.setText(display_data.getDetails());
        ImageView image_thumb = (ImageView) getView().findViewById(R.id.details_img_view);
        image_thumb.setImageResource(display_data.getImage_source());
    }







    public void onAttach(Activity activity) {

        super.onAttach(activity);


    }

}

错误日志

10-19 17:43:10.287: E/AndroidRuntime(9798): FATAL EXCEPTION: main
10-19 17:43:10.287: E/AndroidRuntime(9798): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.wasae.newsapp/com.wasae.newsapp.DetailsActivity}: java.lang.NullPointerException
10-19 17:43:10.287: E/AndroidRuntime(9798):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2266)
10-19 17:43:10.287: E/AndroidRuntime(9798):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2316)
10-19 17:43:10.287: E/AndroidRuntime(9798):     at android.app.ActivityThread.access$600(ActivityThread.java:150)
10-19 17:43:10.287: E/AndroidRuntime(9798):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1298)
10-19 17:43:10.287: E/AndroidRuntime(9798):     at android.os.Handler.dispatchMessage(Handler.java:99)
10-19 17:43:10.287: E/AndroidRuntime(9798):     at android.os.Looper.loop(Looper.java:213)
10-19 17:43:10.287: E/AndroidRuntime(9798):     at android.app.ActivityThread.main(ActivityThread.java:5225)
10-19 17:43:10.287: E/AndroidRuntime(9798):     at java.lang.reflect.Method.invokeNative(Native Method)
10-19 17:43:10.287: E/AndroidRuntime(9798):     at java.lang.reflect.Method.invoke(Method.java:525)
10-19 17:43:10.287: E/AndroidRuntime(9798):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:741)
10-19 17:43:10.287: E/AndroidRuntime(9798):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:557)
10-19 17:43:10.287: E/AndroidRuntime(9798):     at de.robv.android.xposed.XposedBridge.main(XposedBridge.java:132)
10-19 17:43:10.287: E/AndroidRuntime(9798):     at dalvik.system.NativeStart.main(Native Method)
10-19 17:43:10.287: E/AndroidRuntime(9798): Caused by: java.lang.NullPointerException
10-19 17:43:10.287: E/AndroidRuntime(9798):     at com.wasae.newsapp.Details_fragment.setDisplay_data(Details_fragment.java:37)
10-19 17:43:10.287: E/AndroidRuntime(9798):     at com.wasae.newsapp.DetailsActivity.onCreate(DetailsActivity.java:35)
10-19 17:43:10.287: E/AndroidRuntime(9798):     at android.app.Activity.performCreate(Activity.java:5133)
10-19 17:43:10.287: E/AndroidRuntime(9798):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
10-19 17:43:10.287: E/AndroidRuntime(9798):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2230)
10-19 17:43:10.287: E/AndroidRuntime(9798):     ... 12 more

更新

遵循setArguments()方法后,我仍然得到NPE

活动代码

public class DetailsActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_details);
        // Show the Up button in the action bar.
        setupActionBar();



        //attach fragment
        Details_fragment detailsFrag = new Details_fragment(); //initializes any fragments that may be used

        Intent intent = getIntent();
        //SETTER METHOD - DOESNT WORK
//      NewsData temp = new NewsData();
//      temp.setHeadline(intent.getStringExtra("headline"));
//      temp.setDetails(intent.getStringExtra("details"));
//      temp.setImage_source(intent.getIntExtra("img_source", 1));
//      detailsFrag.setDisplay_data(temp); //ERRONEOUS TODO

        Bundle dataBundle = new Bundle();
        dataBundle.putCharSequence("headline", intent.getStringExtra("headline"));
        dataBundle.putCharSequence("details", intent.getStringExtra("details"));
        dataBundle.putInt("img_source", intent.getIntExtra("img_source", 1));

        detailsFrag.setArguments(dataBundle);

        FragmentManager fManager = getFragmentManager(); //prepare fragment manager
        FragmentTransaction fTransaction = fManager.beginTransaction();

        // Add fragments using fTransaction and then commit
        fTransaction.add(R.id.details_activity_container, detailsFrag, "frag_tag");
        //detailsFrag.setData();
        fTransaction.commit();

        //detailsFrag.setData();



    }
}

片段代码

public class Details_fragment extends Fragment {

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

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

        //get arguments 
        Bundle dataBundle = new Bundle();
        dataBundle = this.getArguments();

        TextView headline = (TextView) getView().findViewById(R.id.details_headline_view);
        headline.setText(dataBundle.getString("headline"));
        TextView detail = (TextView) getView().findViewById(R.id.details_details_view);
        detail.setText(dataBundle.getString("details"));
        ImageView image_thumb = (ImageView) getView().findViewById(R.id.details_img_view);
        image_thumb.setImageResource(dataBundle.getInt("img_source"));

        return view;

    }

//  public void setData() {
//      Bundle dataBundle = new Bundle();
//      dataBundle = this.getArguments();
//      
//      TextView headline = (TextView) getView().findViewById(R.id.details_headline_view);
//      headline.setText(dataBundle.getString("headline"));
//      TextView detail = (TextView) getView().findViewById(R.id.details_details_view);
//      detail.setText(dataBundle.getString("details"));
//      ImageView image_thumb = (ImageView) getView().findViewById(R.id.details_img_view);
//      image_thumb.setImageResource(dataBundle.getInt("img_source"));
//  }

    public void onAttach(Activity activity) {

        super.onAttach(activity);


    }
}

错误记录

10-19 23:18:20.271: E/AndroidRuntime(29737): FATAL EXCEPTION: main
10-19 23:18:20.271: E/AndroidRuntime(29737): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.wasae.newsapp/com.wasae.newsapp.DetailsActivity}: java.lang.NullPointerException
10-19 23:18:20.271: E/AndroidRuntime(29737):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2266)
10-19 23:18:20.271: E/AndroidRuntime(29737):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2316)
10-19 23:18:20.271: E/AndroidRuntime(29737):    at android.app.ActivityThread.access$600(ActivityThread.java:150)
10-19 23:18:20.271: E/AndroidRuntime(29737):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1298)
10-19 23:18:20.271: E/AndroidRuntime(29737):    at android.os.Handler.dispatchMessage(Handler.java:99)
10-19 23:18:20.271: E/AndroidRuntime(29737):    at android.os.Looper.loop(Looper.java:213)
10-19 23:18:20.271: E/AndroidRuntime(29737):    at android.app.ActivityThread.main(ActivityThread.java:5225)
10-19 23:18:20.271: E/AndroidRuntime(29737):    at java.lang.reflect.Method.invokeNative(Native Method)
10-19 23:18:20.271: E/AndroidRuntime(29737):    at java.lang.reflect.Method.invoke(Method.java:525)
10-19 23:18:20.271: E/AndroidRuntime(29737):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:741)
10-19 23:18:20.271: E/AndroidRuntime(29737):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:557)
10-19 23:18:20.271: E/AndroidRuntime(29737):    at de.robv.android.xposed.XposedBridge.main(XposedBridge.java:132)
10-19 23:18:20.271: E/AndroidRuntime(29737):    at dalvik.system.NativeStart.main(Native Method)
10-19 23:18:20.271: E/AndroidRuntime(29737): Caused by: java.lang.NullPointerException
10-19 23:18:20.271: E/AndroidRuntime(29737):    at com.wasae.newsapp.Details_fragment.onCreateView(Details_fragment.java:23)
10-19 23:18:20.271: E/AndroidRuntime(29737):    at android.app.Fragment.performCreateView(Fragment.java:1699)
10-19 23:18:20.271: E/AndroidRuntime(29737):    at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:889)
10-19 23:18:20.271: E/AndroidRuntime(29737):    at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1061)
10-19 23:18:20.271: E/AndroidRuntime(29737):    at android.app.BackStackRecord.run(BackStackRecord.java:682)
10-19 23:18:20.271: E/AndroidRuntime(29737):    at android.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1443)
10-19 23:18:20.271: E/AndroidRuntime(29737):    at android.app.Activity.performStart(Activity.java:5142)
10-19 23:18:20.271: E/AndroidRuntime(29737):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2239)
10-19 23:18:20.271: E/AndroidRuntime(29737):    ... 12 more
黑带

问题是,当您调用detailsFrag.setDisplay_data(temp); //ERRONEOUS TODO onCreateView尚未被调用时,并getView返回null。您应该使用setArguments,提供要在Fragment中显示的数据,并检索其中包含getArguments内部数据的数据onCreateView

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在Activity中的片段中设置TextView

来自分类Dev

Android:无法在片段中设置TextView值

来自分类Dev

Android从View Pager中的Parent Activity设置片段视图

来自分类Dev

片段中间(I):从edittext获取输入,在片段的textview中设置文本

来自分类Dev

在ViewPager片段中更新TextView

来自分类Dev

从片段访问布局中的TextView

来自分类Dev

Settext到TextView中的片段

来自分类Dev

更改片段中的 TextView 内容

来自分类Dev

在片段中设置焦点

来自分类Dev

如何显示或设置Android片段中的textview的datepicker对话框?

来自分类Dev

在片段中设置错误TextInputLayout

来自分类Dev

在片段中设置图像变量

来自分类Dev

调整片段中TextView的文本大小

来自分类Dev

在片段内的textview中创建超链接

来自分类Dev

如何在片段中替换textView的文本

来自分类Dev

在片段内的textview中创建超链接

来自分类Dev

如何从片段中的OnListItemClick更改TextView的文本

来自分类Dev

调整片段中TextView的文本大小

来自分类Dev

片段中缺少 TextView 数据(文本)

来自分类Dev

如何在片段中启动 TextView?

来自分类Dev

将Activity中的Arraylist传递给片段

来自分类Dev

Activity与Android中多个片段之间的通信

来自分类Dev

Android导航回到Activity的片段中

来自分类Dev

如何用片段替换 Activity 中的 FrameLayout?

来自分类Dev

在右侧的HorizontalScrollView中设置TextView

来自分类Dev

从 Activity 的 2 静态片段中获取 Activity 的 1 Intent extras

来自分类Dev

如何从活动中更新对话框片段中的textview?

来自分类Dev

android片段中的Textview在横向布局中重复

来自分类Dev

zxing onActivityResult不只在Activity中的片段中调用

Related 相关文章

热门标签

归档