2012-12-24 39 views
0

是否可以在Android的對話框中打開類?在對話框中設置類

例如:

Dialog settingsDialog = new Dialog(this); 
     settingsDialog.getWindow().requestFeature(Window.FEATURE_NO_TITLE); 
     settingsDialog.setContentView(getLayoutInflater(). 
            inflate(R.layout.image_pager, null)); 
     settingsDialog.show(); 

正在打開的圖像。我怎樣才能加載類而不是xml佈局?

附加信息:
這是我ImagePager類

public class ImagePopUp extends BaseActivity implements OnClickListener { 

    private ViewPager pager; 
    Button boutton_retour; 
    public static String img; 


    private DisplayImageOptions options; 
    String url,image,title; 
    ArrayList<Post> PostDetails = new ArrayList<Post>(); 

    public void onCreate(Bundle savedInstanceState) { 
     requestWindowFeature(Window.FEATURE_NO_TITLE); 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main_diaporama_pager); 

     showViewHolderExtra(); 

    } 


    private class ImagePagerAdapter extends PagerAdapter { 

     private String[] images; 
     private LayoutInflater inflater; 

     @Override 
     public void destroyItem(View container, int position, Object object) { 
      ((ViewPager) container).removeView((View) object); 
     } 

     ImagePagerAdapter(String[] images) { 
      this.images = images; 
      inflater = getLayoutInflater(); 
     } 

     @Override 
     public void finishUpdate(View container) { 
     } 

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


     @Override 
     public Object instantiateItem(View view, int position) { 

      Dialog settingsDialog = new Dialog(ImagePopUp.this); 
      settingsDialog.getWindow().requestFeature(Window.FEATURE_NO_TITLE); 
      settingsDialog.setContentView(getLayoutInflater().inflate(R.layout.image_layout, null)); 
      settingsDialog.show(); 

      final View imageLayout = inflater.inflate(R.layout.item_pager_image, null); 
      final ImageView imageView = (ImageView) imageLayout.findViewById(R.id.im_pager); 
      final ProgressBar spinner = (ProgressBar) imageLayout.findViewById(R.id.loadinprogress); 

      imageLoader.displayImage(images[position], imageView, options, new ImageLoadingListener() { 

       public void onLoadingStarted() { 
        spinner.setVisibility(View.VISIBLE); 

       } 


       public void onLoadingFailed(FailReason failReason) { 
        String message = null; 
        switch (failReason) { 
         case IO_ERROR: 
          message = "Input/Output error"; 
          break; 
         case OUT_OF_MEMORY: 
          message = "Out Of Memory error"; 
          break; 
         case UNKNOWN: 
          message = "Unknown error"; 
          break; 
        } 

        Toast.makeText(ImagePopUp.this, message, Toast.LENGTH_SHORT).show(); 

        spinner.setVisibility(View.GONE); 
        imageView.setImageResource(android.R.drawable.ic_delete); 
       } 

       public void onLoadingComplete(Bitmap loadedImage) { 
        spinner.setVisibility(View.GONE); 
        Animation anim = AnimationUtils.loadAnimation(ImagePopUp.this, R.anim.fade_in); 
        imageView.setAnimation(anim); 
        anim.start(); 
       } 

       public void onLoadingCancelled() { 
        // Do nothing 
       } 
      }); 

      ((ViewPager) view).addView(imageLayout, 0); 
      return imageLayout; 
     } 

     @Override 
     public boolean isViewFromObject(View view, Object object) { 
      return view.equals(object); 
     } 

     @Override 
     public void restoreState(Parcelable state, ClassLoader loader) { 
     } 

     @Override 
     public Parcelable saveState() { 
      return null; 
     } 

     @Override 
     public void startUpdate(View container) { 
     } 

    } 

    public void showViewHolderExtra(){ 

     String[] seperated = img.split(";"); 

     Bundle bundle = getIntent().getExtras(); 
     int pagerPosition = bundle.getInt("POSITION", 0); 

     System.out.println("image: "+ pagerPosition); 

     pager = (ViewPager) findViewById(R.id.pager); 
     pager.setAdapter(new ImagePagerAdapter(seperated)); 
     pager.setCurrentItem(pagerPosition); 

     options = new DisplayImageOptions.Builder() 
      .showImageForEmptyUri(R.drawable.ic_launcher) 
      .cacheOnDisc() 
      .imageScaleType(ImageScaleType.IN_SAMPLE_INT) 
      .build(); 
    } 




    public void onClick(View v) { 
     // TODO Auto-generated method stub 

     switch(v.getId()){ 

     case R.id.boutton_retour: 
      finish(); 
     break; 

     } 
    } 
} 

我想這是出現在點擊對話框。

+0

是的,有可能,請參閱[this](http://stackoverflow.com/questions/7365635/how-to-center-layout-inside-of-android-dialog?rq=1)問題例。 – Adinia

+0

謝謝,但它不顯示如何加載對話框中的類或提示 – Dimitri

+0

@sophia:你可以解釋一下你在找什麼嗎? –

回答

0

最簡單的方法就是在你的AndroidManifest設置:

<activity 
      android:name=".ImagePopUp" 
      android:theme="@android:style/Theme.Dialog" > 
     </activity> 

如果您需要在對話框有一個自定義大小,你可以在你ImagePopUp類的開頭使用這樣的

DisplayMetrics dm = new DisplayMetrics(); 
getWindowManager().getDefaultDisplay().getMetrics(dm); 
int screen_width = dm.widthPixels; 
int screen_height = dm.heightPixels; 

getWindow().setLayout((screen_width *0.75), (int) (screen_height - 50)); 
getWindow().setGravity(Gravity.CENTER); 

然後,打開類像往常一樣,使用上點擊意向:

Intent intent = new Intent(YourActualClass.this, ImagePopUp.class); 
startActivity(intent); 
0

您希望整個活動加載到對話框中。有幾種方法。如果該活動只是一個ViewPager,你可以只設置對話框的內容,只是ViewPager:

Dialog settingsDialog = new Dialog(this); 
    settingsDialog.getWindow().requestFeature(Window.FEATURE_NO_TITLE); 

    ViewPager mViewPager = new ViewPager(this); 
    ImagePagerAdapter adapter = new ImagePagerAdapter(images); 
    mViewPager.setAdapter(adapter); 
    settingsDialog.setContentView(mViewPager); 
    settingsDialog.show(); 

你甚至可以加載與正常人一樣的意圖整個活動,但當時只是它看起來像一個對話框,以對話主題或其他。

如果您知道.setContentView可以採取資源ID 一個視圖,那麼它應該成爲自明的使用什麼方法。它就像onCreate

0

ÿ ou可以通過在佈局xml中使用自定義視圖來完成此操作。

settingsDialog.setContentView(getLayoutInflater().inflate(R.layout.image_pager, null)); 

佈局/ imagepaper.xml

<com.your.package.CustomLinearLayout 
    xmlns: ... 
    android:layout_width="" ... etc 
    /> 

那麼這就是你的 '類' 的對話框的佈局

CustomLinearLayout。java的

public class CustomLinearLayout extends LinearLayout { 

    // Overridden constructors 

    // onFinishInflate() etc 

} 

另一種方式做,這是一個 'DialogFragment'

如下所示:http://blog.blundell-apps.com/tut-generic-fragment-dialog/

你的類擴展DialogFragment:

public class OneOptionDialogFragment<T> extends DialogFragment { 

     // do stuff 

} 

,並顯示出了對話框(取自上面的url):

OneOptionDialogFragment<UserDetails> dialogFragment = OneOptionDialogFragment.newInstance(title, message, buttonText); 
    dialogFragment.show(getSupportFragmentManager(), "DeleteFragTag");