2016-07-15 1 views
1

Pickers를 사용하는 방법을 배우고 있으며 View를 DatePickerFragment로 전달하는 데 문제가 있습니다. 다음은 샘플 전체 프로젝트 소스 파일에 github의 링크입니다 : 여기 https://github.com/MienTommy/DatePickerFragmentDatePickerFragment에서보기를 전달하는 방법은 무엇입니까? ListView 및 ArrayAdapter 사용

그리고는 TODO 부분에 DatePickerFragment

package com.mienapps.datepickerfragment; 

import android.app.Activity; 
import android.app.DatePickerDialog; 
import android.app.Dialog; 
import android.app.DialogFragment; 
import android.content.Context; 
import android.os.Bundle; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.ArrayAdapter; 
import android.widget.DatePicker; 
import android.widget.TextView; 

import java.util.Calendar; 
import java.util.List; 

public class CustomAdapter extends ArrayAdapter<TextView> 
{ 
    Activity mContext; 
    public CustomAdapter(Activity context, List<TextView> views) 
    { 
     super(context, 0, views); 
     mContext = context; 
    } 

    /*Get view from adapter*/ 
    @Override 
    public View getView(int position, View convertView, ViewGroup parent) 
    { 
     View itemView = convertView; 
     if (convertView == null) 
     { 
      itemView = LayoutInflater.from(getContext()).inflate(R.layout.list_item, parent, false); 
     } 

     TextView datePickerView = (TextView) itemView.findViewById(R.id.date_picker); 

     datePickerView.setOnClickListener(new View.OnClickListener() 
     { 
      @Override 
      public void onClick(View view) 
      { 
       DialogFragment newFragment = new DatePickerFragment(); 
       newFragment.show(mContext.getFragmentManager(), "datePicker"); 
      } 
     }); 

     return itemView; 
    } 

    /*Time Picker*/ 
    public static class DatePickerFragment extends DialogFragment 
      implements DatePickerDialog.OnDateSetListener { 

     @Override 
     public Dialog onCreateDialog(Bundle savedInstanceState) { 
      // Use the current date as the default date in the picker 
      final Calendar c = Calendar.getInstance(); 
      int year = c.get(Calendar.YEAR); 
      int month = c.get(Calendar.MONTH); 
      int day = c.get(Calendar.DAY_OF_MONTH); 


      // Create a new instance of DatePickerDialog and return it 
      return new DatePickerDialog(getActivity(), this, year, month, day); 
     } 

     public void onDateSet(DatePicker view, int year, int month, int day) { 
      //TODO: set itemView to the date that is picked. However I can't access it from here. 
     } 
    } 
} 

를 구현하는 소스가된다, 그래서 내가 텍스트를 설정할 수 있습니다 itemView에 액세스하려면 사용자가 선택한 날짜로 변경됩니다. TextView는 ListView의 일부이므로 findViewById를 사용하여 TextView를 참조 할 수 없습니다.

+0

당신은 textview의 목록을 가지고 있습니다. 그런 다음 datepicker에서 날짜를 선택하면보기로 날짜를 설정 하시겠습니까? – Raghunandan

+0

네, 그렇게하고 싶습니다. –

+0

인터페이스를 콜백으로 사용하고 getter setter와 함께 모델 클래스를 사용하고 어댑터에서 notifyDateSetChanged를 호출하여 어댑터에서 뷰를 업데이트 할 수 있습니다. – Raghunandan

답변

0
    당신은 DatePickerFragment의 인터페이스를 추가하고 DatePickerFragment 날짜를 업데이트 할 때마다, 당신은 인터페이스를 호출 할 수 있습니다, 어댑터 클래스에서 해당 인터페이스를 구현할 수
  1. . 어댑터 클래스에서 인터페이스를 재정의하여 원하는대로 수행 할 수 있습니다. 새로운 인터페이스를 사용하는 경우 여기에서 예제를 볼 수 있습니다. http://www.tutorialspoint.com/java/java_interfaces.htm

  2. DatePickerFragment의 업데이트 된 값을 데이터베이스에 저장할 수 있으며 목록을 표시하면서 데이터베이스에서 값을 읽을 수 있습니다.

+0

인터페이스를 인스턴스화하는 방법을 찾을 수 없습니다. 예제를 제공해 줄 수 있습니까? –

관련 문제