2016-04-08 10 views
0

Ich habe ein Fragment namens CalendarFragment. Ich erhalte diesen Fehler, als ich versuchte, das Programm auszuführen. Fehler: (36, 74) Fehler: inkompatible Typen: CalendarFragment kann nicht auf ContextFehler: (36, 74) Fehler: inkompatible Typen: Fragment kann nicht in Kontext konvertiert werden

CalendarFragment umgewandelt werden:

package app.pal.study.samplestudy; 

import android.app.Fragment; 
import android.content.Intent; 
import android.os.Bundle; 
import android.view.LayoutInflater; 
import android.view.MenuItem; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.ListView; 
import java.util.Date; 
import java.util.List; 

public class CalendarFragment extends Fragment { 
@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 

    View rootView = inflater.inflate(R.layout.fragment_calendar, container, false); 

    return rootView; 
} 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.fragment_calendar); 
} 
@Override 
public void onResume() { 
    super.onResume(); 
    refresh(); 
} 

private void refresh() { 
    CalendarEventDataSource dataSource = new CalendarEventDataSource(this); 
    dataSource.openReadOnlyDB(); 
    final List<CalendarEvent> calendarEvents = dataSource.getAllEvents(); 
    dataSource.close(); 

    CalAllEventsListAdapter adapter = new CalAllEventsListAdapter(calendarEvents); 

    ListView listView = (ListView) getView().findViewById(R.id.all_event_list); 
    listView.setAdapter(adapter); 
} 

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    if (item.getItemId() == android.R.id.home) { 
     end(); 
     return true; 
    } 
    return super.onOptionsItemSelected(item); 
} 


@Override 
public void onBackPressed() { 
    end(); 
} 

private void end() { 
    Intent data = new Intent(); 
    data.putExtra(Constants.DATE_KEY, (Date) getIntent().getExtras().get(Constants.DATE_KEY)); 
    setResult(RESULT_OK, data); 
    finish(); 
} 
} 
+0

remove setContentView (R.layout.fragment_calendar); und rufe getActivity() auf, wo du Context brauchst ... !! –

+0

Bitte lernen Sie zuerst etwas über Fragment, bevor Sie Fragen stellen, wenn Sie Probleme haben. Es gibt viele Beispiele, wie Sie die Ansicht in Fragment festlegen. –

Antwort

2

Ein Fragment repräsentiert ein Verhalten oder einen Teil der Benutzeroberfläche in einer Aktivität.

  1. Anruf onCreateView statt onCreate. Entfernen onCreate()

  2. Anruf getActivity() statt diese. getActivity() Gibt die Aktivität zurück, der dieses Fragment derzeit zugeordnet ist.

CalendarEventDataSource dataSource = new CalendarEventDataSource(getActivity());

Problem

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.fragment_calendar); 
} 

Dieser Code für Aktivität. Sie sollten Ihre onCreateView Methode verwenden.

public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) 
    { 

     View rootView = inflater.inflate(R.layout.fragment_calendar, container, false); 
     return rootView; 
    } 

http://developer.android.com/intl/es/guide/components/fragments.html

+1

ummmm WOW .. !!! . – MKJParekh

+0

@MKJParekh Bin ich falsch? –

+1

+ Eins, überhaupt nicht, Du hast mich dazu gebracht zu lernen "Entweder schreibe keine Antwort Oder schreib es einfach auf die beste Weise" – MKJParekh

3

setcontentview in onCreateView von onCreate Methode, die Sie bereits gesetzt Ansicht

1

entferne ich nehme Ihre Fehler zeigt die Linie an CalendarEventDataSource dataSource = new CalendarEventDataSource(this);

Versuchen Sie und ändern Sie this mit getActivity() oder getActivity().getApplicationContext() oder getActivity().getBaseContext().

Auch keine Notwendigkeit für onCreate() wie andere vorgeschlagen haben.

+0

Siehe seine Frage, setContentView (R.layout.fragment_calendar); in onCreate, Wie wir setContentView in onCreate Methode des Fragments. –

+0

Fragt mich, um die Frage wirklich zu sehen? @Jack was du falsch in Frage oder meine Antwort hier siehst? OnCreateView ist alles in Ordnung, nur onCreate entfernen, was Sie denken? – MKJParekh

+0

Ich bin nicht in der Lage SetContentView in OnCreate zu bekommen, wenn Sie ich nicht weiß ... aber dieses PersianBlue wusste nicht über Fragment. Sie müssen ihm vorschlagen, über Fragment zu lernen, bevor Sie Fragen stellen. –

Verwandte Themen