Search code examples
javaandroidandroid-fragmentsonclicklistenerandroid-event

How to Fill Email app with data populated from a fragment that uses data from a pure java class?


I have just started learning fragments in Android.I am now able to display data in fragments using ListFragment and ArrayAdapter. Now, I am trying to use onclickListener and intents on fragments like the way we do with activities and buttons.

I am trying to open email app when clicking on a fragment that appears as we click the listfragment. But, I am not able to get one thing i want to accomplish which is the email address of a contact. How can i achieve it?

I have achieved these results but on second image the To: part is empty. it should appear [email protected] from fragment.

enter image description here enter image description here

public class ContactDetailsFragment extends Fragment {
    private long contactId;

    public ContactDetailsFragment() {
        // Required empty public constructor
    }

    @Override
    public void onCreate(Bundle savedInstanceState){
        super.onCreate(savedInstanceState);
        if (savedInstanceState != null){
            contactId = savedInstanceState.getLong("contactId");
        }
    }


    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {

        return inflater.inflate(R.layout.fragment_contact_details, container, false);
    }

    @Override
    public void onStart() {
        super.onStart();
        View view = getView();
        if (view != null) {

            TextView FNameText = (TextView) view.findViewById(R.id.textFName);
            final Contact contact = myContact[(int) contactId];
            FNameText.setText(contact.getFName());
            TextView LNameText = (TextView) view.findViewById(R.id.textLName);
            LNameText.setText(contact.getLName());
            TextView PhoneText = (TextView) view.findViewById(R.id.textPhone);
            PhoneText.setText(contact.getPhone());
            final TextView EmailText = (TextView) view.findViewById(R.id.textEmail);
            EmailText.setText(contact.getEmail());

            view.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    Intent intent = new Intent(Intent.ACTION_SENDTO);
                    intent.setData(Uri.parse("mailto:"));
                    //intent.setType("text/message");
                    intent.putExtra(Intent.EXTRA_SUBJECT, "Announcement from Mobile Apps Class");
                    intent.putExtra(Intent.EXTRA_EMAIL, myContact.toString());

                    intent.putExtra(Intent.EXTRA_TEXT, "What do you want. How you want? Do you really know what is there in all those Whats?");

                    startActivity(Intent.createChooser(intent, "Email"));

                    //Toast.makeText(getActivity(),"Button is clicked!" +contactId, Toast.LENGTH_LONG).show();

                }
            });

        }
    }

    @Override
    public void onSaveInstanceState(Bundle savedInstanceState){
        savedInstanceState.putLong("contactId", contactId);
    }

    public void setContact(long id){
        this.contactId = id;
    }



}

Solution

  • Adding this line

    intent.setData(Uri.parse("mailto:"+contact.getEmail()));
    

    and removing

    intent.putExtra(Intent.EXTRA_EMAIL, myContact.toString());
    

    solved my problem.