![](/img/trans.png)
[英]How to set text in a textview from a class that implements DialogFragment
[英]Android: set text for TextView in ListView from DialogFragment
我從DialogFragment為ListView設置文本時遇到問題。 我的代碼如下:-我有一個TimePickerFragment如下
package com.working.unility;
import java.util.Calendar;
import com.working.dailyreminder.R;
import android.app.Dialog;
import android.app.TimePickerDialog;
import android.os.Bundle;
import android.support.v4.app.DialogFragment;
import android.text.format.DateFormat;
import android.widget.TextView;
import android.widget.TimePicker;
public class TimePickerFragment extends DialogFragment implements TimePickerDialog.OnTimeSetListener{
private int hour;
private int minute;
public TimePickerFragment() {
}
public Dialog onCreateDialog(Bundle savedInstanceState) {
// TODO Auto-generated method stub
final Calendar ca = Calendar.getInstance();
hour = ca.get(Calendar.HOUR_OF_DAY);
minute = ca.get(Calendar.MINUTE);
return new TimePickerDialog(getActivity(), this, hour, minute, DateFormat.is24HourFormat(getActivity()));
}
@Override
public void onTimeSet(TimePicker arg0, int hour, int minute) {
TextView textView = (TextView) getActivity()().findViewById(R.id.content);
textView.setText(" " + hour);
}
}
和TaskFragment類調用TimePickerFragment如下
import android.os.Bundle;
import android.support.v4.app.DialogFragment;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import com.working.unility.TimePickerFragment;
public class TaskFragment extends Fragment {
private ListView mListView;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// TODO Auto-generated method stub
View rootView = inflater.inflate(R.layout.task, container, false);
mListView = (ListView) rootView.findViewById(R.id.list_task_item);
String[] list_title = getResources().getStringArray(R.array.list_title_task);
ArrayAdapter<String> adapter = new ArrayAdapter<>(getActivity(), R.layout.task_row, R.id.title, list_title);
mListView.setAdapter(adapter);
mListView.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
TimePickerFragment timePicker = new TimePickerFragment();
timePicker.show(getFragmentManager(), "Time set");
}
});
return rootView;
}
}
在ListView中,我有2個TextView包括:標題和內容。 現在,我想通過如上所述的調用TimePickerFragment將文本設置為ListView的TextView ID內容,但是TimePickerFragment無法識別內容ID的行,並且始終為ListView中的第一行設置文本。 那么我該如何解決這個問題呢?
謝謝
您可以嘗試將視圖傳遞給構造函數中的TimePickerFragment
。 然后在onTimeSet
方法中,在視圖上調用setText
。
public class TimePickerFragment extends DialogFragment implements TimePickerDialog.OnTimeSetListener{
private int hour;
private int minute;
private View mView;
public TimePickerFragment(View view) {
mView = view;
}
public Dialog onCreateDialog(Bundle savedInstanceState) {
// TODO Auto-generated method stub
final Calendar ca = Calendar.getInstance();
hour = ca.get(Calendar.HOUR_OF_DAY);
minute = ca.get(Calendar.MINUTE);
return new TimePickerDialog(getActivity(), this, hour, minute, DateFormat.is24HourFormat(getActivity()));
}
@Override
public void onTimeSet(TimePicker arg0, int hour, int minute) {
if(mView instanceof TextView)
((TextView) mView).setText(" " + hour);
}
}
像這樣在OnItemClickListener
更改呼叫
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
TimePickerFragment timePicker = new TimePickerFragment(view);
timePicker.show(getFragmentManager(), "Time set");
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.