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;

        }
    }
}

クリックするとダイアログボックスに表示されるようにします。

4

3 に答える 3

0

これを行うには、レイアウトxmlでカスタムビューを使用します。

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

layout / 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");
于 2012-12-24T14:22:34.890 に答える
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

于 2012-12-24T13:28:09.577 に答える
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);
于 2012-12-24T14:17:47.903 に答える