1

我正在创建一个简单的主从应用程序,我希望用户能够双击详细信息视图屏幕并从设备打开默认的电子邮件应用程序对话框。下面附上我的 TopicDetalsFrament.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;
}   

}

非常感谢您提供的任何帮助/建议,

声码器

4

1 回答 1

2

好吧,您根本没有注册任何活动。实现接口并不会神奇地为您提供点击事件。您必须将片段安装为侦听器。

请参阅手势检测培训并使用您的片段作为 onCreate 方法中的回调设置手势检测器。


除此之外:恕我直言,这种模式在Android上不是很好的做法。用户不会知道他必须双击屏幕才能执行操作。为什么不提供可点击的电子邮件地址(请参阅默认的 Android People 应用程序)或操作栏菜单项?

于 2013-08-05T14:04:45.903 回答