2017-03-07 14 views
1

フラグメントを格納するフレームのonTouchListenerを作成するにはどうすればよいですか? activity_mainファイルは、このフラグメントが呼び出された時点で既に表示されているので、私はinflateする必要はありません。フレーム自体を膨らませようとすると、「予想されるタイプレイアウトのリソース」エラーがスローされます。フレーム内のビューをontouchlistenerにする

ユーザーがボタンに触れてフラグメントをアクティブにすると、そのフラグメントがフレーム内で開かれます。フレームはまた、タッチイベントを聴くことができる必要があります。

これは、フラグメントのための私の断片とonCreateViewが今のようになります。ここでは

public class TeacherFragment extends Fragment { 

public final String TAG = getClass().getSimpleName(); 

public void onAttach(Activity myActivity){ 

    Log.v(TAG, "in TeacherFragment - onAttach, activity is: " + myActivity); 
    super.onAttach(myActivity); 
} 

/** 
* This method will only be called once when the retained 
* Fragment is first created. 
*/ 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    // Retain this fragment across configuration changes. 
    setRetainInstance(true); 
} 

/** 
* This method will be called only when 
* Fragment is attached and ready to display the view. 
*/ 
public View onCreateView(LayoutInflater inflater, final ViewGroup container, Bundle SavedInstanceState){ 

    if(container == null) { 
     Log.v(TAG, "container is null. No need to inflate."); 
     return null; 
    } 

    View v = container.findViewById(R.id.assignment_view); 
    v.setOnTouchListener(new View.OnTouchListener() { 
     @Override 
     public boolean onTouch(View v, MotionEvent event) { 
      Log.d(TAG, "onShortPress: " + event.toString()); 
      Toast.makeText(getView().getContext(), "Testing Short click", Toast.LENGTH_SHORT).show(); 
      return true; 
     } 

     public void onLongPress(MotionEvent event) { 
      Log.d(TAG, "onLongPress: " + event.toString()); 
      Toast.makeText(getView().getContext(), "Testing Long click", Toast.LENGTH_SHORT).show(); 
     } 
    }); 

    return v; 
} //end onCreateView 

}

は私activity_mainです。私はこのフラグメントのためだけに、assignment_viewフレームを使用しようとしています。

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:orientation="horizontal" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:id="@+id/main_layout" 
android:baselineAligned="false"> 

<FrameLayout 
    android:id="@+id/main_menu_frame" 
    android:layout_width="wrap_content" 
    android:layout_height="match_parent" 
    android:background="#FF0000" 
    android:layout_weight=".3"> 
</FrameLayout> 

<FrameLayout 
    android:layout_width="8dp" 
    android:layout_height="match_parent" 
    android:background="#000000"> 
</FrameLayout> 

<FrameLayout 
    android:id="@+id/assignment_view" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:background="#00BBFF" 
    android:layout_weight="8"> 
</FrameLayout> 

</LinearLayout> 
+0

だから何が問題なのですか?あなたはタッチリスナーを設定しようとするが、それは動作しませんまたは何ですか? – azizbekian

+0

私の投稿を更新しました。 –

+0

フラグメントを開始する場所にコードを掲載できますか? – Gary99

答えて

0

ファイルにはinflate()を使用する必要があります。 1つはあなたの "レイアウト"フォルダにあります。これは、エラーメッセージがあなたに伝えるものです。これを見て多くの時間を費やすことなく、あなたはおそらく限りあなたの「activity_main.xml」ファイルを膨らませるように、この

View v = findViewById(R.id.assignment_view); 

をしたい、それが呼び出し側の活動に膨らませたものに頼るよりも、ここでそれを膨らませるために、おそらく良いでしょう。

+0

私は言及すべきだった、申し訳ありません!私がfindviewbyidにしようとすると、 "メソッドを解決できません"と返されます。私はアンドロイドビュークラスをインポートしたので、私は何が欠けているのか分かりません。 –

+1

try 'container.findViewById ... – Gary99

+0

これは私に安定したビルドを提供しますので、正しい方向です!しかし、onTouchイベントは発砲していません。何かご意見は? –

関連する問題