2017-01-03 18 views
1

このコードは、私の目的が単純なカレンダービューアを表示することであるScheduleFragment内にあります。しかし残念ながら、それはタイトルに記載されているエラーを取得します。 "public class ScheduleFragment extends Fragment"を "public class ScheduleFragment extends AppCompatActivity"に変更しても、@ Overrideにエラーが発生します。エラー:シンボルメソッドgetSupportActionBar()、findViewById(int)、getApplicationContext()を見つけることができません

@TargetApi(Build.VERSION_CODES.N) 
public class ScheduleFragment extends Fragment { 

CompactCalendarView compactCalendar; 
private SimpleDateFormat dateFormatMonth = new SimpleDateFormat("MMM - yyyy", Locale.getDefault()); 


public ScheduleFragment() { 
    // Required empty public constructor 
} 


@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 
    // Inflate the layout for this fragment 
    return inflater.inflate(R.layout.fragment_schedule, container, false); 

    final ActionBar actionBar =  getSupportActionBar(); 
    actionBar.setDisplayHomeAsUpEnabled(false); 
    actionBar.setTitle(null); 

    compactCalendar = (CompactCalendarView) findViewById(R.id.compactcalendar_view); 
    compactCalendar.setUseThreeLetterAbbreviation(true); 

    Event ev1 = new Event(Color.RED, 1477040400000L, "Teachers' Professional Day"); 
    compactCalendar.addEvent(ev1); 

    compactCalendar.setListener(new CompactCalendarView.CompactCalendarViewListener() { 
     @Override 
     public void onDayClick(Date dateClicked) { 
      Context context = getApplicationContext(); 
      if (dateClicked.toString().compareTo("Fri Oct 21 00:00:00 AST 2016") == 0) { 
       Toast.makeText(context, "Teachers' Professional Day", Toast.LENGTH_SHORT).show(); 
      }else { 
       Toast.makeText(context, "No Events Planned for that day", Toast.LENGTH_SHORT).show(); 
      } 
     } 

     @Override 
     public void onMonthScroll(Date firstDayOfNewMonth) { 
      actionBar.setTitle(dateFormatMonth.format(firstDayOfNewMonth)); 
     } 
    }); 

}     

} 

答えて

3

断片では、直接findViewById()を呼び出し、あなただけの膨張ビューを使用して、それにfindViewById()を呼び出すことはできません。
は、だからあなたのonCreateViewコードは同じ

Context c = getContext().getApplicationContext(); 

getSupportActionBar();

のために行く、あなたが最初に getContext()を呼び出し、それがそう、それはなり に getApplicationContext()を呼び出す必要があり、 getApplicationContext()ため

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 
    // Inflate the layout for this fragment 
    View v = inflater.inflate(R.layout.fragment_schedule, container, false); 
    compactCalendar = (CompactCalendarView) v.findViewById(R.id.compactcalendar_view); 
    //Make sure that the view inflated above has these view elements which you are trying to initialize 
    . 
    . 
    . 
    } 

同様に、なります

+0

しかし、私の実行権利ですか?私が見たチュートリアルでは、これらのコードはMainActivityで実行されています。私のケースでは、これをフラグメントに入れて、NavigationDrawerで最近応答します。私は正しい道にいますか? – SovietSenpai

+0

私はあなたの言ったことをしましたが、ナビゲーション・ドロワーのスケジュールをクリックすると、応答しないというエラーが出ます。 getSupportActionBarのコードは以下のとおりですか?: final ActionBar actionBar =((AppCompatActivity)getActivity())。getSupportActionBar(); – SovietSenpai

+0

スケジュールをクリックするとエラー/警告ログとは何ですか? –

0

私の意見では、ビューを膨らませて、 view.findViewByID(R.id.id)、 メソッドの最後にreturnを呼び出します。

+0

すでにありました。今私は別の問題を抱えています。上記のHarshit Dwivediへの私のコメントを見てください。 – SovietSenpai

関連する問題