0

このような質問がすでに寄せられていることは知っていますが、他の人の問題をいくつか調べた後でも、プロジェクト間の違いにより、何をどのように行うかを理解することが困難になっているため、コードを動作させることができません。

通常、これは機能しますが、フォームはフラグメントアクティビティにあるため、当然、フラグメントがこれまたはそれを拡張しないために発生するいくつかの問題 (解決したものもあれば、解決していないものもあります) に遭遇しました。

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 はすべてエラーとして下線が引かれます: 「メソッド findViewById(int) は Fragment1 型に対して未定義です」私はこれを試しました:

final EditText formName=(EditText)fragment1View.findViewById(R.id.formName);

そして、これはおそらく何人かの人々を助けたと思われますが、onCreateViewで宣言したにもかかわらず、私にとってfragment1Viewは単に未解決です。

私は多くのことを試しましたが、何をすべきかわかりません。諦めてFragmentではなく標準のActivityで行きたかったのですが、Fragmentでなければなりません。助けてください :/

4

2 に答える 2

0

フラグメントで見つけたいビューごとにフィールドを作成する必要があります。次に、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フラグメントで使用することはできません。Viewただし、実際にはフラグメントのレイアウトである onCreateView で膨らませて使用できます。

于 2013-06-16T14:27:09.157 に答える