2017-02-20 15 views
1

クリックするとテキストが表示されるフラグメントがあり、そのアクティビティでフラグメントビュー全体をドラッグすることができます。フラグメントを含むFrameLayoutのonTouchListenerと、フラグメントのonClickListenerを配置します。しかし、私のonTouchListenerは決して起動しません。 onTouchEventをonClickから渡すにはどうすればよいですか?以下はAndroid:アクティビティonTouchはフラグメントonClickのため呼び出されていません

は、私のコードの関連部分

activity_question.xml

<LinearLayout 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" 
    android:id="@+id/linearlayout_question"> 

    <include 
     layout="@layout/toolbar_question" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" /> 

    <FrameLayout 
     android:id="@+id/framelayout_question_fragmentcontainer" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" /> 

</LinearLayout> 

QuestionActivity

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_question); 

    LinearLayout linearLayout = (LinearLayout) findViewById(R.id.linearlayout_question); 
    linearLayout.setOnTouchListener(new View.OnTouchListener() { 

     private float dX, dY; 
     @Override 
     public boolean onTouch(View view, MotionEvent event) { 
      switch (event.getAction()) { 

       case MotionEvent.ACTION_DOWN: 

        dX = view.getX() - event.getRawX(); 
        dY = view.getY() - event.getRawY(); 
        break; 

       case MotionEvent.ACTION_MOVE: 

        view.animate() 
          .x(event.getRawX() + dX) 
          .y(event.getRawY() + dY) 
          .setDuration(0) 
          .start(); 
        break; 
       default: 
        return false; 
      } 
      return true; 
     } 
    }); 

    if (findViewById(R.id.framelayout_question_fragmentcontainer) != null) { 
     if (savedInstanceState != null) { 
      return; 
     } 

     // Create a new Fragment to be placed in the activity layout 
     if (DataService.hasNext()) { 
      Trivia trivia = DataService.getNext(); 
      triviaList.add(trivia); 
      QuestionFragment questionFragment = QuestionFragment.newInstance(trivia.getQuestion(), trivia.getAnswer()); 
      currentPosition = 0; 

      // Add the fragment to the 'fragment_container' FrameLayout 
      getSupportFragmentManager().beginTransaction() 
        .add(R.id.framelayout_question_fragmentcontainer, questionFragment).commit(); 
     } 
    } 

QuestionFragment

です
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 
    // Inflate the layout for this fragment 
    View view = inflater.inflate(R.layout.fragment_question, container, false); 
    TextView textViewQuestion = (TextView) view.findViewById(R.id.textview_question_question); 
    textViewQuestion.setText(mQuestion); 

    final TextView textViewAnswer = (TextView) view.findViewById(R.id.textview_question_answer); 
    textViewAnswer.setText(mAnswer); 

    view.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      textViewAnswer.setVisibility(View.VISIBLE); 
     } 
    }); 
    return view; 
} 

答えて

0

オンクリックは必要ありません。オンタッチを使用するだけで問題は解決します。オンタッチ内では、GestureDetectorを使用するか、MotionEvent.ACTION_DOWNMotionEvent.ACTION_UPを検出するだけで、クリックを検出することもできます。

あなたがGestureDetecorを使用したい場合は、操作を行います。

gestureDetector = new GestureDetector(this, new SingleTapConfirm()); 

とonTouch内側:

if (gestureDetector.onTouchEvent(arg1)) { 
    // tap detected 
    return true; 
} 
関連する問題