2017-09-22 57 views
1

我刚开始使用对话框片段,并且有很多我不知道。我有一个MainActivity通过点击一个按钮打开一个DialogFragment,在DialogFragment我还有一个按钮打开一个SecondDialogFragment。第一个工作正常,但第二个没有,我点击第一个DialogFragment按钮在屏幕上失去焦点与背景,但什么也没有显示。我真的不知道什么是错的?如果有人能帮我一把,我将不胜感激。Android SecondDialogFragment不从DialogFragment显示

这是第一个DialogFragment我打电话给onClick第二个。

DialogFragment.java

ImageButton iconButton = v.findViewById(R.id.user_icon); 
      iconButton.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View view) { 
        new DSelectIcon().show(getFragmentManager(), "DSelectIcon"); 
       } 
      }); 

SecondDialogFragment.java

public class DSelectIcon extends DialogFragment{ 

    private View v = null; 

    private ImageView Selection; 
    private static final Integer[] items = { R.drawable.image1, 
      R.drawable.image1, R.drawable.image1, 
      R.drawable.image1, R.drawable.image1, 
      R.drawable.image1, R.drawable.image1, 
      R.drawable.image1 }; 



    public DSelectIcon() { 
    } 

    @NonNull 
    @Override 
    public Dialog onCreateDialog(Bundle savedInstanceState) { 
     if (savedInstanceState != null) { 
      // Restore last state for checked position. 
     } 
     LayoutInflater inflater = getActivity().getLayoutInflater(); 
     v = inflater.inflate(R.layout.grid_icon_event, null); 
     return createDSelectIcon(v); 
    } 

    private AlertDialog createDSelectIcon(View v) { 
     AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); 

     Selection = v.findViewById(R.id.selection); 
     GridView grid = v.findViewById(R.id.grid); 
     // grid.setAdapter(new ArrayAdapter<Integer>(this, R.layout.cell, 
     // items)); 
     grid.setAdapter(new CustomGridAdapter((MainActivity)getActivity(), items)); 
     grid.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
      @Override 
      public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) { 
       // TODO Auto-generated method stub 
       Toast.makeText(getActivity(), "Clicked postion is" + i, 
         Toast.LENGTH_LONG).show(); 
       //Selection.setImageResource(items[arg2]); 
      } 
     }); 

     return builder.create(); 
    } 

    public class CustomGridAdapter extends BaseAdapter { 
     private Activity mContext; 

     // Keep all Images in array 
     public Integer[] mThumbIds; 

     // Constructor 
     public CustomGridAdapter(MainActivity mainActivity, Integer[] items) { 
      this.mContext = mainActivity; 
      this.mThumbIds = items; 
     } 

     @Override 
     public int getCount() { 
      return mThumbIds.length; 
     } 

     @Override 
     public Object getItem(int position) { 
      return mThumbIds[position]; 
     } 

     @Override 
     public long getItemId(int position) { 
      return 0; 
     } 

     @Override 
     public View getView(int position, View convertView, ViewGroup parent) { 
      ImageView imageView = new ImageView(mContext); 
      imageView.setImageResource(mThumbIds[position]); 
      imageView.setScaleType(ImageView.ScaleType.CENTER_CROP); 
      imageView.setLayoutParams(new GridView.LayoutParams(70, 70)); 
      return imageView; 
     } 

    } 
} 

Grid_icon_event.xml

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:id="@+id/LinearLayout1" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" 
    android:paddingBottom="@dimen/activity_vertical_margin" 
    android:paddingLeft="@dimen/activity_horizontal_margin" 
    android:paddingRight="@dimen/activity_horizontal_margin" 
    android:paddingTop="@dimen/activity_vertical_margin" 
    tools:context=".MainActivity" > 

    <ImageView 
     android:id="@+id/selection" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" /> 

    <GridView 
     android:id="@+id/grid" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:columnWidth="100dip" 
     android:gravity="center" 
     android:horizontalSpacing="5dip" 
     android:numColumns="auto_fit" 
     android:stretchMode="columnWidth" 
     android:verticalSpacing="40dip" > 
    </GridView> 

</LinearLayout> 

回答

0

FIXED!

一个愚蠢的错误,但我忘了补充一点:

builder.setView(v); 

SecondDialogFragment.java方法createDSelectIcon

现在看起来是这样的:

public class DSelectIcon extends DialogFragment{ 

    private View v = null; 

    private ImageView Selection; 
    private static final Integer[] items = { R.drawable.image1, 
      R.drawable.image1, R.drawable.image1, 
      R.drawable.image1, R.drawable.image1, 
      R.drawable.image1, R.drawable.image1, 
      R.drawable.image1 }; 



    public DSelectIcon() { 
    } 

    @NonNull 
    @Override 
    public Dialog onCreateDialog(Bundle savedInstanceState) { 
     if (savedInstanceState != null) { 
      // Restore last state for checked position. 
     } 
     LayoutInflater inflater = getActivity().getLayoutInflater(); 
     v = inflater.inflate(R.layout.grid_icon_event, null); 
     return createDSelectIcon(v); 
    } 

    private AlertDialog createDSelectIcon(View v) { 
     AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); 

     Selection = v.findViewById(R.id.selection); 
     GridView grid = v.findViewById(R.id.grid); 
     // grid.setAdapter(new ArrayAdapter<Integer>(this, R.layout.cell, 
     // items)); 
     grid.setAdapter(new CustomGridAdapter((MainActivity)getActivity(), items)); 
     grid.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
      @Override 
      public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) { 
       // TODO Auto-generated method stub 
       Toast.makeText(getActivity(), "Clicked postion is" + i, 
         Toast.LENGTH_LONG).show(); 
       //Selection.setImageResource(items[arg2]); 
      } 
     }); 

     builder.setView(v); 


     return builder.create(); 
    } 

    public class CustomGridAdapter extends BaseAdapter { 
     private Activity mContext; 

     // Keep all Images in array 
     public Integer[] mThumbIds; 

     // Constructor 
     public CustomGridAdapter(MainActivity mainActivity, Integer[] items) { 
      this.mContext = mainActivity; 
      this.mThumbIds = items; 
     } 

     @Override 
     public int getCount() { 
      return mThumbIds.length; 
     } 

     @Override 
     public Object getItem(int position) { 
      return mThumbIds[position]; 
     } 

     @Override 
     public long getItemId(int position) { 
      return 0; 
     } 

     @Override 
     public View getView(int position, View convertView, ViewGroup parent) { 
      ImageView imageView = new ImageView(mContext); 
      imageView.setImageResource(mThumbIds[position]); 
      imageView.setScaleType(ImageView.ScaleType.CENTER_CROP); 
      imageView.setLayoutParams(new GridView.LayoutParams(70, 70)); 
      return imageView; 
     } 

    } 
} 
相关问题