在 Fragment 内执行操作

Posted

技术标签:

【中文标题】在 Fragment 内执行操作【英文标题】:Performing Action inside the Fragment 【发布时间】:2015-04-09 04:00:37 【问题描述】:

我有调用Fragment的MainActivity,片段调用类是:

public class Main extends Fragment

    //public Main()
    Button btn;
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
           Bundle savedInstanceState) 

        final View rootView = inflater.inflate(R.layout.main, container, false);
        try
            btn = (Button) rootView.findViewById(R.id.button1);
            btn.setOnClickListener(new OnClickListener()
                @Override
                public void onClick(View v) 
                    // TODO Auto-generated method stub
                    TextView tx = (TextView)rootView.findViewById(R.id.TextView04);
                    tx.setText("hello World");
                

            );
        catch(Exception e)

        
      // View rootView = inflater.inflate(R.layout.main, container, false);
       return rootView;
       


我的问题是,我无法在这个片段中进行一些活动。 只是为了了解如何在这个片段中执行一些活动,我添加了一个 TextView 和一个 Button,当单击该按钮时,它会将 TextView 的文本更改为“Hello World”。现在我尝试运行应用程序,一切都很好,但是在单击按钮后我收到错误:“不幸的是应用程序已停止。”,我不知道为什么我会出现这样的错误,我是 android 开发的新手,所以请帮助并请解释您添加的所有内容。

Here is the Log Cat Error:

02-09 20:33:30.765: E/AndroidRuntime(13596): FATAL EXCEPTION: main
02-09 20:33:30.765: E/AndroidRuntime(13596): java.lang.NullPointerException
02-09 20:33:30.765: E/AndroidRuntime(13596):    at info.androidhive.slidingmenu.Main$1.onClick(Main.java:29)
02-09 20:33:30.765: E/AndroidRuntime(13596):    at android.view.View.performClick(View.java:4212)
02-09 20:33:30.765: E/AndroidRuntime(13596):    at android.view.View$PerformClick.run(View.java:17476)
02-09 20:33:30.765: E/AndroidRuntime(13596):    at android.os.Handler.handleCallback(Handler.java:800)
02-09 20:33:30.765: E/AndroidRuntime(13596):    at android.os.Handler.dispatchMessage(Handler.java:100)
02-09 20:33:30.765: E/AndroidRuntime(13596):    at android.os.Looper.loop(Looper.java:194)
02-09 20:33:30.765: E/AndroidRuntime(13596):    at android.app.ActivityThread.main(ActivityThread.java:5371)
02-09 20:33:30.765: E/AndroidRuntime(13596):    at java.lang.reflect.Method.invokeNative(Native Method)
02-09 20:33:30.765: E/AndroidRuntime(13596):    at java.lang.reflect.Method.invoke(Method.java:525)
02-09 20:33:30.765: E/AndroidRuntime(13596):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:833)
02-09 20:33:30.765: E/AndroidRuntime(13596):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:600)
02-09 20:33:30.765: E/AndroidRuntime(13596):    at dalvik.system.NativeStart.main(Native Method)

【问题讨论】:

发布完整的错误堆栈跟踪以获得更好的帮助 你能把你得到的错误跟踪放在 logcat 中吗?您能否也发布可能有帮助的 R.layout.main xml 文件内容 把你的 XML 文件代码也放在这里。 Main.java:29 它指的是哪一行?你能把xml文件也发一下吗? 【参考方案1】:

首先,您的代码没有任何问题,您的代码所知道的都是正确的,您只是忘记了一点。基于 log-cat 错误,您的 textView id 有问题,因此将您的 id 更改为与 main.xml 不同的 id,然后将其写入您的代码然后尝试运行它。还有一件事,尝试删除你的 try catch 异常,它是没用的。这是您的代码的结论。

public class Main extends Fragment
    Button btn;
    TextView tx;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
           Bundle savedInstanceState) 
        final View rootView = inflater.inflate(R.layout.main, container, false);
        btn = (Button) rootView.findViewById(R.id.button1);
        tx = (TextView)rootView.findViewById(R.id.newID); //Change your textView ID into different ID
        btn.setOnClickListener(new OnClickListener()
            @Override
            public void onClick(View v) 
                // TODO Auto-generated method stub
                tx.setText("hello World");
            
        );
       return rootView;
      

    

【讨论】:

以上是关于在 Fragment 内执行操作的主要内容,如果未能解决你的问题,请参考以下文章

如何在同一页面上的 Fragment 内创建具有 3 个 Fragment 的 ViewPager?

Android组件--碎片(fragment)

Activity 与 Fragment通信方式-Android

Fragment生命周期详解

自定义视图不会在 Fragment 内更新

如何从一个activity中跳转到一个fragment