1

Я создаю простое приложение-мастер-деталь, где я хочу, чтобы пользователь мог дважды коснуться экрана просмотра подробностей и открыть диалог приложения электронной почты по умолчанию с устройство. Ниже приведен мой файл ThemeDetalsFrament.java. Пожалуйста, помогите мне понять, почему код OnDoubleTapListener не работает.Пытаясь запустить приложение электронной почты с двойным нажатием на фрагмент

public class TopicDetailFragment extends Fragment implements OnDoubleTapListener 
{ 
/** 
* The fragment argument representing the item ID that this fragment 
* represents. 
*/ 
public static final String ARG_ITEM_ID = "item_id"; 

/** 
* The topic content this fragment is presenting. 
*/ 
private TopicArrayContent.TopicArrayItem mItem; 

/** 
* Mandatory empty constructor for the fragment manager to instantiate the 
* fragment (e.g. upon screen orientation changes). 
*/ 
public TopicDetailFragment() 
{ 

} 

@Override 
public void onCreate(Bundle savedInstanceState) 
{ 
    super.onCreate(savedInstanceState); 

    if (getArguments().containsKey(ARG_ITEM_ID)) 
    { 
     // Load the content specified by the fragment arguments. 
     mItem = TopicArrayContent.ITEM_MAP.get(getArguments().getString(ARG_ITEM_ID)); 
    } 

} 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
     Bundle savedInstanceState) 
{ 
    View rootView = inflater.inflate(R.layout.fragment_topic_detail, container, false); 

    // Show the Scriptures content as text in a TextView. 
    if (mItem != null) 
    {   
     ((TextView) rootView.findViewById(R.id.topic_scripture1)).setText(mItem.scripture1); 
     ((TextView) rootView.findViewById(R.id.topic_scripture2)).setText(mItem.scripture2); 
     ((TextView) rootView.findViewById(R.id.topic_scripture3)).setText(mItem.scripture3); 
     ((TextView) rootView.findViewById(R.id.topic_scripture4)).setText(mItem.scripture4); 
     ((TextView) rootView.findViewById(R.id.topic_scripture5)).setText(mItem.scripture5); 
     ((TextView) rootView.findViewById(R.id.topic_scripture6)).setText(mItem.scripture6); 
     ((TextView) rootView.findViewById(R.id.topic_scripture7)).setText(mItem.scripture7); 
     ((TextView) rootView.findViewById(R.id.topic_name)).setText(mItem.topicName); 
    } 
    return rootView;   

} 

@Override 
public boolean onDoubleTap(MotionEvent e) { 
    // TODO Auto-generated method stub 
    Intent i = new Intent(Intent.ACTION_SEND); 
    i.setType("message/rfc822"); 
    i.putExtra(Intent.EXTRA_EMAIL, 
      new String[] { "Enter recipient's email address" }); 
    i.putExtra(Intent.EXTRA_SUBJECT, "subject of email"); 
    i.putExtra(Intent.EXTRA_TEXT, "body of email"); 
    try { 
     startActivity(Intent.createChooser(i, "Send mail...")); 
    } catch (android.content.ActivityNotFoundException ex) { 
     Toast.makeText(TopicDetailFragment.this.getActivity(), 
       "There are no email clients installed.",   Toast.LENGTH_LONG) 
       .show(); 
    } 
    return true; 
} 

@Override 
public boolean onDoubleTapEvent(MotionEvent e) { 
    // TODO Auto-generated method stub  
    return true; 
} 

@Override 
public boolean onSingleTapConfirmed(MotionEvent e) { 
    // TODO Auto-generated method stub 
    return false; 
} 

} 

Большое спасибо за любую помощь/предложения вы можете дать,

SonCoder

+0

Я нахожу много информации о том, как это сделать на мероприятии, но мало что касается реализации на фрагменте. Однако я новичок, поэтому еще многое предстоит узнать. У кого-нибудь есть идеи? Есть ли лучший способ с примерами/учебниками, на которые вы можете указать? – dmiannay

ответ

2

Ну, вы просто не зарегистрировали для каких-либо событий. Внедрение интерфейса не волшебным образом передает вам события крана. Вам нужно будет установить фрагмент в качестве слушателя.

Смотрите gesture detection training и настройте детектор жестов с помощью фрагмента в качестве обратного вызова в методе onCreate.


Помимо этого: ИМХО, этот шаблон не является хорошей практикой на Android. Пользователь не будет знать, что ему нужно дважды коснуться экрана, чтобы выполнить действие. Почему бы не указать интерактивный адрес электронной почты (см. Приложение «Люди по умолчанию для Android») или запись в меню панели действий?

+0

Оцените отзыв об использовании интерактивного адреса электронной почты. Я рассмотрю это как предпочтительную альтернативу. Также благодарен за ссылку на «обучение обнаружению жестов». – dmiannay

+0

Рад быть в состоянии помочь :) – Patrick

Смежные вопросы