我想要两个在一个按钮中创建两个功能

Posted

技术标签:

【中文标题】我想要两个在一个按钮中创建两个功能【英文标题】:I want two create two functions in one button 【发布时间】:2019-11-23 19:30:25 【问题描述】:

我正在开发一个将数据存储在Firebase 中的应用程序。问题是当我点击提交时,数据停留在表单上。当我单击提交时,我需要它返回到主屏幕。

我尝试使用启动活动方法,就像我想从 MainActivity 移动到另一个类时一样。它会工作,但我的数据将不会被保存。

感谢您的帮助。提前致谢!

buttonSubmitReport.setOnClickListener(v -> 
            reports.setDate(textDate.getText().toString().trim());
            reports.setTime(textTime.getText().toString().trim());
            reports.setReport(editRep.getText().toString().trim());

            reff.push().setValue(reports);
                    reff.child(String.valueOf(maxID+1)).setValue("Reports");
                    Toast.makeText(submitReport.this,"Thanks for the information!", Toast.LENGTH_LONG).show();
                
            );

【问题讨论】:

你好!您可以使用标志来实现您的功能,就像我将向您解释的那样...首先获取一个布尔变量并将其设置为 false..然后在按钮单击调用方法上存储数据并在存储数据后将布尔标志设置为 true 并检查 if( flag) 表示 flag 为真,然后移动到另一个活动......就是这样! ;) 当数据成功存储在 Firebase 控制台中时,您是否重定向回之前的活动? 在数据成功上传而不是重定向到其他活动时覆盖 setvalue 完整侦听器,更多信息请查看this @DharaJani 那是我的问题。我需要它在成功存储数据后重定向。但到目前为止还没有 @Shane 您必须在成功插入数据时使用意图为 startActivity 编写代码:) 【参考方案1】:

我从您的问题中得到的是,您从那里有一个活动,您正在启动另一个活动来编辑详细信息,并且单击某个按钮时,您想保存这些详细信息并返回到以前的活动,对吗? 要做到这一点,只需添加一些监听器,当它完成时,只需完成活动

buttonSubmitReport.setOnClickListener(new View.OnClickListener() 
    @Override
    public void onClick(View v) 

        reports.setDate(textDate.getText().toString().trim());
        reports.setTime(textTime.getText().toString().trim());
        reports.setReport(editRep.getText().toString().trim());

        reff.push().setValue(reports);

        reff.child(String.valueOf(maxID + 1)).setValue("Reports")
                .addOnSuccessListener(new OnSuccessListener<Void>() 
                    @Override
                    public void onSuccess(Void aVoid) 
                        // Write was successful!, here either finish or move to another activity
                        Toast.makeText(submitReport.this, "Thanks for the information!", Toast.LENGTH_LONG).show();
                        finish();
                    
                )
                .addOnFailureListener(new OnFailureListener() 
                    @Override
                    public void onFailure(@NonNull Exception e) 
                        // Write failed
                        Toast.makeText(submitReport.this, "Failed to store the data", Toast.LENGTH_LONG).show();
                    
                );
    );

【讨论】:

创建OnSuccessListener 的一个实例和OnFailureListener 的一个实例可能会更好,而不是每次单击按钮时都创建一个。此评论适用于 OP;我不希望回答者做所有这些。 感谢@Kartik 的建议,确定我们可以这样做,这只是一个关于如何做某事的示例,接下来要做的是改进,在大多数情况下,这不是问题,因为一旦它成功它会完成,所以没有新的按钮点击。谢谢 哦,是的,是表单提交按钮 感谢您的帮助。由于某种原因,直到我看到您的回复,我才想到完成方法。我在吐司之后添加了finish(),它运行顺利。返回主屏幕。 @Shane 太好了,它帮助了你,请投票,这样它也可以帮助其他人。【参考方案2】:

您可以使用 firebase 值更新侦听器,一旦值更新执行操作。 或者您可以使用 firebase 事务处理程序。

override fun onComplete(dataBaseError: DatabaseError?, status: Boolean, snapShot: DataSnapshot?) 
            //Operation complete call back
        

        override fun doTransaction(data: MutableData): Transaction.Result 
            //Perform your operation here
            return Transaction.success(data)
        
    )

【讨论】:

【参考方案3】:

如果可能的话,你可以尝试一次

public class MainActivity extends AppCompatActivity 

    @Override
    protected void onCreate(Bundle savedInstanceState) 
    
        buttonSubmitReport.setOnClickListener(new View.OnClickListener() 
                    @Override
                    public void onClick(View v) 

                        InsertData();

                        ReportsID = Fetch Reports Id and use condition is empty or not
                        if (TextUtils.isEmpty(ReportsID)) 
                            InsertData();
                         else 
                            //---Start Activity
                        
                    
        );

    

    public bool InsertData()
    
        reports.setDate(textDate.getText().toString().trim());
        reports.setTime(textTime.getText().toString().trim());
        reports.setReport(editRep.getText().toString().trim());

        reff.push().setValue(reports);
        reff.child(String.valueOf(maxID+1)).setValue("Reports");
        Toast.makeText(submitReport.this,"Thanks for the information!", Toast.LENGTH_LONG).show();

    

【讨论】:

以上是关于我想要两个在一个按钮中创建两个功能的主要内容,如果未能解决你的问题,请参考以下文章

在java中创建按钮

如何在单个 spfx 解决方案中创建两个 webpart?

如何在情节提要中创建一个按钮以启动在 xcode swift 中使用 spritekit 创建的游戏

Swift 自定义导航项

如何从数据库c#中创建多年的下一个和上一个按钮

android学习——实现两个activity之间的跳转