在按钮上单击时在android中添加片段,并同时向其中添加数据

希瓦姆·阿格瓦尔(Shivam Aggarwal)

我正在创建一个Android应用程序,其中有一个主要活动,其中包含2个片段,fragUp和fragDown。fragUp具有两个编辑文本字段和一个按钮,而fragDown具有两个文本视图字段。
最初,主要活动仅显示fragUp并询问用户输入字段,当用户单击按钮时,将触发onClick方法,并在fragUp下面创建fragDown并显示用户输入的两个字段。

摘要-FRAGMENTS-
fragUp,fragDown
主要活动-主要活动
主要活动具有两个线性布局1.
fragUp的1.ly1
2. fragDown的2.ly2注

-所有片段都是动态添加在main java文件中的,而不是在main.xml文件中声明的。

这是主要的活动代码

public class MainActivity extends AppCompatActivity implements fragUp.fragInterface {
FragmentTransaction ft,ft1;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_second);
         ft=getFragmentManager().beginTransaction();
        fragUp fu=new fragUp();

        ft.add(R.id.ly1,fu);          //Fragment fragUp is added dynamically.

    ft.commit();
        }

    public void set(String a,String b){

         ft1=getFragmentManager().beginTransaction();
        fragDown ob=new fragDown();
        ft1.add(R.id.ly2,ob);
        ft1.commit();
        fragDown fd=(fragDown)getFragmentManager().findFragmentById(R.id.ly2);
        fd.seta(a, b);


    }

这是我的fragUp Java代码-

public class fragUp extends Fragment {
    View v;
    public interface fragInterface{
        public void set(String a,String b);
    }
    fragInterface ob;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
    v=inflater.inflate(R.layout.fragup,container,false);
    Button b=(Button)v.findViewById(R.id.button1);
    b.setOnClickListener( new OnClickListener(){ 
public void onClick(View v){ 
store();   
}});

    return v;
    }


    public void onAttach(Activity activity){
    super.onAttach(activity);
    try{
        ob=(fragInterface)activity;
    }
    catch(ClassCastException e){
        throw new ClassCastException();

    }
    }

     public void store(){           with main activity
    EditText et1=(EditText)v.findViewById(R.id.editText1);
    EditText et2=(EditText)v.findViewById(R.id.editText2);
    ob.set(et1.getText().toString(),et2.getText().toString());   //Interface implemented to share data 
}
}

这是fragDown Java代码-

public class fragDown extends Fragment {
View v;
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        v=inflater.inflate(R.layout.fragdown,container,false);
        return v;
    }

    public void seta(String a,String b){
        TextView t1=(TextView)v.findViewById(R.id.textView1);
        TextView t2=(TextView)v.findViewById(R.id.textView2);
        t1.setText(a);
        t2.setText(b);

    }
}

当我运行该应用程序并按下按钮时,我的应用程序崩溃并且logcat说-

08-05 09:37:02.198: E/AndroidRuntime(2866): java.lang.NullPointerException: Attempt to invoke virtual method 'void com.example.fragment.fragDown.seta(java.lang.String, java.lang.String)' on a null object reference
08-05 09:37:02.198: E/AndroidRuntime(2866):     at com.example.fragment.Second.set(Second.java:30)
08-05 09:37:02.198: E/AndroidRuntime(2866):     at com.example.fragment.fragUp.store(fragUp.java:52)
08-05 09:37:02.198: E/AndroidRuntime(2866):     at com.example.fragment.fragUp$1.onClick(fragUp.java:25)

如果有人可以帮助我,那就太好了。我花了几个小时进行调试,找不到我出了问题的地方。请帮忙。

耶洛诺拉

为什么不将值作为参数传递给片段?检查本指南中的“布局”部分:http : //developer.android.com/reference/android/app/Fragment.html

这是该指南的摘录,可以为您提供帮助:

public static DetailsFragment newInstance(int index) {
    DetailsFragment f = new DetailsFragment();

    // Supply index input as an argument.
    Bundle args = new Bundle();
    args.putInt("index", index);
    f.setArguments(args);

    return f;
}

然后在设置片段时:

// Prepare args
Bundle arguments = new Bundle();
arguments.putString(key, value);

// Init fragment and pass args
fragment = new DetailsFragment();
fragment.setArguments(arguments);

// Commit to the fragment manager, thus
// inflating the view
getSupportFragmentManager().beginTransaction()
    .add(R.id.your_id, fragment).commit();

您可以访问片段onCreate方法上的捆绑参数

具体解决您的代码,您应该:

  • MainActivity.set,将args传递给您的片段:

    public void set(String a,String b) {
        ft1 = getFragmentManager().beginTransaction();
        fragDown ob = new fragDown();
    
        // Add args. It is a good practice
        // to declare keys as public static final
        // variables, accessing them accordingly. Here
        // I'm just putting the string, but you should
        // avoid that.
        Bundle args = new Bundle();
        args.putString("key_a", a);
        args.putString("key_b", b);
        ob.setArguments(args);
    
        ft1.add(R.id.ly2, ob);
        ft1.commit();
    }
    
  • 添加FragDown.onCreate方法:

    private String a = "";
    private String b = "";
    
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    
        this.a = getArguments().getString("key_a");
        this.b = getArguments().getString("key_b");
    }
    
  • 致电seta您的onCreateView

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
        v = inflater.inflate(R.layout.fragdown, container, false);
        seta(this.a, this.b)
        return v;
    }
    

这是由于Fragment的生命周期所致:http : //developer.android.com/reference/android/app/Fragment.html#Lifecycle

现在,一些建议:

  1. 如果您对Android开发很认真,请阅读我发布的链接(从上到下),直到您理解它们为止。抱歉,无法解决这些问题。
  2. “显示代码”这类问题通常被认为是不礼貌的,并且容易被否决或引起仇恨的评论。StackOverflow正在努力开展“好”活动,这是我应付并采取后续行动的主要原因之一。
  3. 在用尽所有其他选项并仔细阅读了文档,教程,源代码,GitHub问题和Pull Request等之后,在StackOverflow中提问是您的最后资源。
  4. 带着盐的建议:)

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

从不同的线程向DataSet添加数据并同时在DataGridView中显示它们

来自分类Dev

在按钮上添加数字单击使用jQuery吗?

来自分类Dev

在按钮单击PHP脚本上添加数组

来自分类Dev

如何在按钮单击事件中向数据表添加行?

来自分类Dev

当您单击按钮时,不会添加数据

来自分类Dev

如何在按钮上添加自定义属性并在android中单击时检索它?

来自分类Dev

在按钮上单击时在HTML文档中动态添加标签立即撤消

来自分类Dev

在Android片段中的按钮上添加onTouchListener

来自分类Dev

在Android片段中的按钮上添加onTouchListener on

来自分类Dev

如何在按钮标签内添加数据关闭?

来自分类Dev

java-当单击按钮时如何向Jtable添加数组

来自分类Dev

Android向片段添加按钮

来自分类Dev

Android向片段添加按钮

来自分类Dev

如何在按钮上运行代码单击Android片段

来自分类Dev

如何在按钮上运行代码单击Android片段

来自分类Dev

在按钮上单击添加图像到按钮

来自分类Dev

使用Android片段时在ActivityResult上添加按钮

来自分类Dev

在向Android应用中的活动添加新片段时出错

来自分类Dev

在按钮上打开google map片段,然后在android studio中单击

来自分类Dev

在按钮单击上添加输入字段以及来自PHP的数据

来自分类Dev

向会话添加数据

来自分类Dev

向对象添加数据

来自分类Dev

如何在按钮单击上添加一行?

来自分类Dev

如何在按钮单击上添加更多元素

来自分类Dev

使用javascript在按钮单击上添加文本框

来自分类Dev

如何在按钮单击时动态添加指令

来自分类Dev

如何在按钮单击时添加新的ObservableCollection?

来自分类Dev

在wicket中动态添加文本字段并在按钮单击事件上的表单中下拉。

来自分类Dev

如何在按钮上的<form>中添加<div>单击html和jquery

Related 相关文章

  1. 1

    从不同的线程向DataSet添加数据并同时在DataGridView中显示它们

  2. 2

    在按钮上添加数字单击使用jQuery吗?

  3. 3

    在按钮单击PHP脚本上添加数组

  4. 4

    如何在按钮单击事件中向数据表添加行?

  5. 5

    当您单击按钮时,不会添加数据

  6. 6

    如何在按钮上添加自定义属性并在android中单击时检索它?

  7. 7

    在按钮上单击时在HTML文档中动态添加标签立即撤消

  8. 8

    在Android片段中的按钮上添加onTouchListener

  9. 9

    在Android片段中的按钮上添加onTouchListener on

  10. 10

    如何在按钮标签内添加数据关闭?

  11. 11

    java-当单击按钮时如何向Jtable添加数组

  12. 12

    Android向片段添加按钮

  13. 13

    Android向片段添加按钮

  14. 14

    如何在按钮上运行代码单击Android片段

  15. 15

    如何在按钮上运行代码单击Android片段

  16. 16

    在按钮上单击添加图像到按钮

  17. 17

    使用Android片段时在ActivityResult上添加按钮

  18. 18

    在向Android应用中的活动添加新片段时出错

  19. 19

    在按钮上打开google map片段,然后在android studio中单击

  20. 20

    在按钮单击上添加输入字段以及来自PHP的数据

  21. 21

    向会话添加数据

  22. 22

    向对象添加数据

  23. 23

    如何在按钮单击上添加一行?

  24. 24

    如何在按钮单击上添加更多元素

  25. 25

    使用javascript在按钮单击上添加文本框

  26. 26

    如何在按钮单击时动态添加指令

  27. 27

    如何在按钮单击时添加新的ObservableCollection?

  28. 28

    在wicket中动态添加文本字段并在按钮单击事件上的表单中下拉。

  29. 29

    如何在按钮上的<form>中添加<div>单击html和jquery

热门标签

归档