代码之家  ›  专栏  ›  技术社区  ›  Khadija Daruwala

错误:(36,74)错误:类型不兼容:无法将片段转换为上下文

  •  0
  • Khadija Daruwala  · 技术社区  · 8 年前

    我有一个叫做CalendarFragment的片段。我在尝试执行程序时遇到了这个错误。 错误:(36,74)错误:类型不兼容:CalendarFragment无法转换为Context

    日历片段:

    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();
    }
    }
    
    3 回复  |  直到 8 年前
        1
  •  3
  •   Abhishek Patel    8 年前

    去除 setcontentview 从…起 onCreate 已在中设置视图的方法 onCreateView

        2
  •  2
  •   IntelliJ Amiya    6 年前

    片段表示活动中的行为或用户界面的一部分。

    1. 呼叫 onCreateView 而不是 onCreate 去除 onCreate()

    2. 呼叫 获取活动() 而不是 . getActivity()返回此片段当前关联的活动 .

    CalendarEventDataSource数据源=新 日历事件数据源(getActivity());

    问题

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

    此代码用于Activity。您应该使用 创建视图时 方法

     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

        3
  •  1
  •   MKJParekh    8 年前

    我想你的错误是指那条线 CalendarEventDataSource dataSource = new CalendarEventDataSource(this);

    尝试并更改 this 与任何一个 getActivity() getActivity().getApplicationContext() getActivity().getBaseContext() .

    也不需要 onCreate() 正如其他人所建议的那样。