2017-03-07 5 views
1

Wie kann ich einen onTouchListener für einen Rahmen, der nur ein Fragment beherbergt? Ich muss eine activity_main-Datei nicht aufblasen, da sie zum Zeitpunkt des Aufrufs dieses Fragments bereits angezeigt wird. Wenn ich versuche, den Rahmen selbst aufzublasen, wird ein "erwartete Ressource vom Typ Layout" -Fehler ausgelöst.Machen Sie einen Blick in einen Rahmen ein ontouchlistener

Das Fragment wird aktiviert, wenn ein Benutzer eine Schaltfläche berührt und das Fragment im Rahmen geöffnet werden soll. Der Rahmen muss auch in der Lage sein, Berührungsereignisse zu hören. Diese

ist, was mein Fragment und onCreateView für das Fragment wie jetzt aussieht:

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 

}

Hier mein activity_main ist. Ich versuche, den assignment_view-Rahmen nur für dieses Fragment zu verwenden.

<?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

Also, was ist das Problem? Sie versuchen, Touch-Listener zu setzen, aber es funktioniert nicht oder was? – azizbekian

+0

Ich habe meinen Beitrag aktualisiert. –

+0

Können Sie Ihren Code dort veröffentlichen, wo Sie das Fragment starten? – Gary99

Antwort

0

Sie sollten nur inflate() auf eine Datei verwenden. Eine, die in Ihrem "Layout" -Ordner ist. Dies ist, was die Fehlermeldung Ihnen sagt. Ohne viel Zeit bei dieser Suche zu verbringen, werden Sie wahrscheinlich wollen diese

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

Was Ihre „activity_main.xml“ Datei aufbläst, ist es wahrscheinlich besser, sie aufzublasen hier als auf das verlassen, was in der anrufenden Aktivität aufgeblasen wurde .

+0

Ich hätte erwähnen sollen, sorry! Wenn ich versuche, viewbyid zu finden, kommt es als "Methode kann nicht aufgelöst werden" zurück. Ich habe die Android-View-Klasse importiert, so dass ich nicht sicher bin, was ich vermisse. –

+1

versuchen 'container.findViewById ...' – Gary99

+0

Das gibt mir einen stabilen Build, so dass es in die richtige Richtung! Aber die onTouch-Ereignisse werden nicht ausgelöst. Irgendwelche Gedanken? –