2017-11-09 1 views
-1

다양한 EditText에 onClick 메서드를 추가합니다. DialogFragment를 엽니 다. DialogFragment를 연보기의 ID를 가져 오는 방법은 무엇입니까?

public void eligeHora (View view){ 
     TimePickerFragment newFragment = new TimePickerFragment(); 
     newFragment.show(getFragmentManager(),"hadshads"); 
    } 


는 이제 DialogFragment 클래스 내부에서 나는 글고의 ID를 클릭 싶어 (많습니다). 이 예제에서는 id가 "hora"인 EditText를 얻지 만 "generic"으로 지정합니다.


public class TimePickerFragment extends DialogFragment implements TimePickerDialog.OnTimeSetListener { 

    @Override 
    public Dialog onCreateDialog(Bundle savedInstanceState){ 

     //Create and return a new instance of TimePickerDialog 
     return new TimePickerDialog(getActivity(),this, 0, 0, 
       true); 
    } 

    @Override 
    public void onTimeSet(TimePicker view, int hourOfDay, int minute) { 
//Do something with the user chosen time 
     //Get reference of host activity (XML Layout File) TextView widget 
     EditText tv = getActivity().findViewById(R.id.hora); 

     tv.setText(String.valueOf(hourOfDay)+ " : " + 
       String.valueOf(minute) + "\n"); 
    } 

} 

어떻게 뷰의 ID가 DialogFragment를 열려면 클릭받을 수 있나요? 이 예제에서는 특정 뷰 (R.id.hora)의 ID를 사용했지만이 방법을 사용하는 모든 뷰에이 단편을 사용할 수있게하려고합니다. eligeHora.

+0

무엇을 원하십니까? –

+0

DialogFragment를 연보기의 ID를 가져옵니다. –

답변

1

당신은하지 않는 생성자를 통해하지만 정적 인 방법을 사용하여 Fragment에 ID를 전달할 수 있습니다

public static TimePickerFragment instance(int viewId){ 
    TimePickerFragment fragment = new TimePickerFragment(); 
    Bundle b = new Bundle(); 
    b.putInt("KEY_ID", viewId); 
    fragment.setArguments(b); 
    return fragment; 
} 

대신

TimePickerFragment newFragment = new TimePickerFragment(); 
당신이 가진 것

를 작성하는
TimePickerFragment newFragment = TimePickerFragment.instance(myEditTextID); 

나중에,이 같은 ID를 검색 할 수 있습니다

@Override 
public void onTimeSet(TimePicker view, int hourOfDay, int minute) { 
    int id = getArguments().getInt("KEY_ID"); 
    //... 
} 

을하지만이 Fragment의 일부가되는 FragmentView의 'from에 액세스하는 데 좋은 생각이 아니다 알고 있어야. Activity과 통신하기 위해 인터페이스 사용을 고려하십시오.

1

다른 대답은 기본적으로 정확합니다. setArguments()을 사용하여 뷰 ID를 TimePickerFragment으로 전달할 수 있습니다. 누락 된 유일한 부분은 실제로 클릭 한 뷰의 ID를 얻는 방법입니다.

...

이 방법의 View 매개 변수를 사용하면 모든 뷰에 속성을 사용하고 있다고 가정하고 각이 eligeHora(View view) 방법을 사용하면 사용자가 클릭 한 도면이다. 따라서 view.getId()eligeHora() 안에 호출하여 클릭 된 뷰의 ID를 얻을 수 있습니다.

관련 문제