2015-02-25 2 views
1

У меня есть фрагмент, который выполняет или отображает фрагмент диалога после нажатия кнопки. Этот фрагмент диалога отображает таблицу, сгенерированную кодом, однако при попытке щелкнуть по кнопке на ней отображается enter image description hereOnCreateView не вызывается в диалоговом фрагменте из фрагмента

И когда я отслеживаю ее в LogCat, фрагменты диалога onCreateView не вызывают. Может ли кто-нибудь мне помочь или объяснить это? Я не так хорошо разбираюсь в программировании на Android, и я знаю, что мне еще предстоит многому научиться.

Вот код фрагмента, который вызывает диалог фрагментировать

public class fragment_schedule extends Fragment { 

............... 


public fragment_schedule(ArrayList<SubjSchedule> subj){ 
    subject = subj; 
} 
@SuppressWarnings("deprecation") 
@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
     Bundle savedInstanceState) { 

.................. 

showlstbtn = (Button) rootView.findViewById(R.id.button_showlstschd); 
     showlstbtn.setOnClickListener(new OnClickListener(){ 

      @Override 
     public void onClick(View v) { 

      // TODO Auto-generated method stub 
      FragmentTransaction ft = getActivity().getFragmentManager().beginTransaction(); 
      ft.addToBackStack(null); 
      DialogFragment dialog = ShowLstDialog.newInstance(subject); 
      dialog.show(ft, "dialog"); 
     } 

    }); 

    .......... 

и Херес мой диалог фрагмент

public class ShowLstDialog extends DialogFragment { 

private static final String TAG = ShowLstDialog.class.getSimpleName(); 
public static Context mContext; 
public static TableLayout tl; 
public static TableRow trh; 
private static ArrayList<SubjSchedule> subject= new ArrayList<SubjSchedule>(); 

public static DialogFragment newInstance(ArrayList<SubjSchedule> subj) { 
    // TODO Auto-generated method stub 
    DialogFragment f = new DialogFragment(); 
    subject = subj; 
    Log.v(TAG, subject.size()+""); 
    return f; 
} 



@Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

    } 


@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
     Bundle savedInstanceState) { 
    Log.v(TAG, "OnCreateView: " + subject.size()+""); 
    View rootView = inflater.inflate(R.layout.fragment_dialog_showlst, container); 
    //mEditText = (EditText) view.findViewById(R.id.txt_your_name); 
    Log.v(TAG, "OnCreateView: " + subject.size()+""); 
    getDialog().setTitle(""); 
    tl = (TableLayout) rootView.findViewById(R.id.tablelayout_schedlst); 
    trh = new TableRow(getActivity()); 
    TextView[] tvh = new TextView[3]; 
    for(int i=0; i<3; i++){ 
     tvh[i] = new TextView(getActivity()); 
     tvh[i].setBackgroundResource(R.drawable.green2); 
     tvh[i].setTextColor(getResources().getColor(R.color.LightCyan)); 
     tvh[i].setGravity(Gravity.CENTER); 
     tvh[i].setPadding(30, 3, 30, 3); 
     //tvh[i].setLayoutParams(params); 
     trh.addView(tvh[i]); 

    } 

    tvh[0].setText("Subject"); 
    tvh[1].setText("Description"); 
    tvh[2].setText("Instructor"); 

    TableRow[] tr = new TableRow[subject.size()]; 
    for(int i=0; i<subject.size();i++){ 
     tr[i] = new TableRow(getActivity()); 
     TextView[] tv1 = new TextView[3]; 


     for(int k=0; k<3; k++){ 
      tv1[k] = new TextView(getActivity()); 
      tv1[k].setBackgroundResource(R.drawable.btn_default_disabled_holo_dark); 
      tv1[k].setTextColor(getResources().getColor(R.color.list_background_pressed)); 
      tv1[k].setGravity(Gravity.CENTER); 
      tv1[k].setPadding(30, 3, 30, 3); 
      //tvh[i].setLayoutParams(params); 
      tr[i].addView(tv1[i]); 

     } 

     tv1[0].setText(subject.get(i).getcn()); 
     tv1[1].setText(subject.get(i).getd()); 
     tv1[2].setText(subject.get(i).geti()); 
     tl.addView(tr[i]); 

    } 
    return rootView; 
} 



} 

и здесь XML-файл диалогового фрагмента

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:orientation="vertical" > 
    <ScrollView 
     android:layout_width="fill_parent" 
     android:layout_height="match_parent" 
     android:background="@color/LightCyan" 
     android:scrollbars="vertical" > 

     <HorizontalScrollView 
      android:id="@+id/horizontalScrollView1" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" > 

      <RelativeLayout 
       android:layout_width="wrap_content" 
       android:layout_height="match_parent" 
       android:orientation="horizontal" > 

       <TableLayout 
        android:id="@+id/tablelayout_schedlst" 
        android:layout_width="fill_parent" 
        android:layout_height="fill_parent" 
        android:stretchColumns="*" > 
       </TableLayout> 
      </RelativeLayout> 
     </HorizontalScrollView> 
    </ScrollView> 

</RelativeLayout> 

спасибо, что заранее.

+0

изменить это 'DialogFragment f = new DialogFragment();' to 'ShowLstDialog f = new ShowLstDialog()' – Raghunandan

+0

@Raghunandan, почему бы вам не опубликовать его как ответ? – Blackbelt

+0

@Blackbelt в порядке – Raghunandan

ответ

3

Изменить этот

public static DialogFragment newInstance(ArrayList<SubjSchedule> subj) { 
    // TODO Auto-generated method stub 
    DialogFragment f = new DialogFragment(); 
    subject = subj; 
    Log.v(TAG, subject.size()+""); 
    return f; 
} 

в

public static ShowLstDialog newInstance(ArrayList<SubjSchedule> subj) { 
    // TODO Auto-generated method stub 
    ShowLstDialog f = new ShowLstDialog(); 
    subject = subj; 
    Log.v(TAG, subject.size()+""); 
    return f; 
} 

И прочитал

http://developer.android.com/reference/android/app/DialogFragment.html

1

Вместо (или в дополнение к нему), реализующей onCreateView (LayoutInflater, ViewGroup, Bundle) для генерации е зрения иерархии внутри диалога, вы можете реализовать onCreateDialog (Bundle), чтобы создать свой собственный объект пользовательского Dialog

Таким образом, вы должны использовать:

@Override 
public Dialog onCreateDialog(Bundle savedInstanceState) 

заменить:

public View onCreateView(LayoutInflater inflater, ViewGroup container, 
    Bundle savedInstanceState) 
+0

А где же вид? – CoolMind

0

Вместо

public static DialogFragment newInstance(...) { 
    DialogFragment f = new DialogFragment(); 
    return f; 
} 

написать письмо

public static DialogFragment newInstance(...) { 
    DialogFragment f = new ShowLstDialog(); 
    return f; 
} 

а также использовать Bundle и setArguments, getArguments для передачи аргументов.

Смежные вопросы