Android 从碎片活动联系人表单发送电子邮件
我知道已经有人问过类似的问题,但即使在研究了其他人的问题之后,我仍然无法让我的代码正常工作,主要是因为项目之间的差异使我很难理解做什么和如何做 通常这是可行的,但是表单是在一个片段活动中,所以我很自然地遇到了几个问题(有些问题我已经解决了,有些问题没有解决),这是因为片段没有扩展这个或那个等等Android 从碎片活动联系人表单发送电子邮件,android,forms,email,fragment,Android,Forms,Email,Fragment,我知道已经有人问过类似的问题,但即使在研究了其他人的问题之后,我仍然无法让我的代码正常工作,主要是因为项目之间的差异使我很难理解做什么和如何做 通常这是可行的,但是表单是在一个片段活动中,所以我很自然地遇到了几个问题(有些问题我已经解决了,有些问题没有解决),这是因为片段没有扩展这个或那个等等 package com.example; import android.app.Fragment; import android.content.Intent; import android.os.Bu
package com.example;
import android.app.Fragment;
import android.content.Intent;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.EditText;
import android.widget.Toast;
public class Fragment1 extends Fragment{
@Override
public View onCreateView(LayoutInflater inflater,ViewGroup container,Bundle savedInstanceState){
setHasOptionsMenu(true);
View fragment1View=inflater.inflate(R.layout.fragment1,container,false);
return fragment1View;
}
public void sendEmail(View button){
final EditText formName=(EditText)findViewById(R.id.formName);
String clientName=formName.getText().toString();
final EditText formEmail=(EditText)findViewById(R.id.formEmail);
String clientEmail=formEmail.getText().toString();
final EditText formDetails=(EditText)findViewById(R.id.formDetails);
String clientDetails=formDetails.getText().toString();
Intent i = new Intent(Intent.ACTION_SEND);
i.setType("message/rfc822");
i.putExtra(Intent.EXTRA_EMAIL,new String[]{"example@email.com"});
i.putExtra(Intent.EXTRA_SUBJECT, "New Private Service Request");
i.putExtra(Intent.EXTRA_TEXT, "TODO: compose message body");
try {
startActivity(Intent.createChooser(i, "Send email with...?"));
} catch (android.content.ActivityNotFoundException exception) {
Toast.makeText(Fragment1.this.getActivity(), "No email clients installed on device!", Toast.LENGTH_LONG).show();
}
}
}
基本上,EditText控件的findViewById都被下划线为错误:“Fragment1类型的findViewById(int)方法未定义”。
我试过这个:
final EditText formName=(EditText)fragment1View.findViewById(R.id.formName);
虽然这可能对一些人有所帮助,但对我来说,fragment1View根本无法解决,尽管我已经在onCreateView中声明了它
我尝试了很多事情,只是不知道该怎么办。我想放弃,用一个标准的活动代替片段,但它必须是片段。请提供帮助:/您需要为要在片段中找到的每个视图创建字段。然后在
onCreateView
中编写如下内容:
Button button;
@Override
public View onCreateView(LayoutInflater inflater,ViewGroup container,Bundle savedInstanceState){
setHasOptionsMenu(true);
View fragment1View=inflater.inflate(R.layout.fragment1,container,false);
button = (Button) fragment1View.findViewById(R.id.button);
return fragment1View;
}
不能在片段中使用
findVIewById
。但您可以在onCreateView中使用它,onCreateView实际上是片段的布局。解决方案是在定义和初始化edittext define视图时使用它。
例如:
最终EditText formName=(EditText)fragment1View.findViewById(R.id.formName)
每当您初始化片段中的按钮时执行此操作。:)
愉快的编码。所以在处理片段活动时,我必须首先将视图声明为全局变量,然后在onCreate方法中为每个视图创建字段?这是否意味着,在sendEmail()方法中,我可以毫不费力地从视图中收集值,然后处理它们(String clientName=formName.getText().toString();),而无需另外调用视图?谢谢你!:)您也不能为每个视图创建一个新字段,而是保留一个对您在onCreateView方法中膨胀的片段视图的引用,然后在需要时在其视图层次结构中找到合适的视图。嗯,第二种解释对我来说有点抽象,没有示例(我还是新手),但重要的是,你们的回答已经为我做到了。该应用程序工作正常。非常感谢,伙计;)