首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Android - set imageView set

Android - set imageView set
EN

Stack Overflow用户
提问于 2014-05-23 08:39:44
回答 4查看 7.3K关注 0票数 3

我有一个应用程序,其中我有一个自定义的listView,在单击listView中的任何项目时,都会显示一个DialogFramgent。现在,我要做的是将DialogFramgent中的DialogFramgent设置为外部存储中的图像。我知道我可以将imageView的源设置为这样:

代码语言:javascript
复制
File imgFile = new  File(“/sdcard/Images/test_image.jpg”);
if(imgFile.exists()){

    Bitmap myBitmap = BitmapFactory.decodeFile(imgFile.getAbsolutePath());

    ImageView myImage = (ImageView) findViewById(R.id.imageViewItem);
    myImage.setImageBitmap(myBitmap);

}

但是,我无法正确地初始化我的ImageView变量,因为findViewById给出了一个错误:‘findViewById(int)方法对于ItemDialog类型没有定义。

这里是我的自定义listView onClickLisenter中的一部分,在这里我调用了我的DialogFragment:

代码语言:javascript
复制
resultListView.setOnItemClickListener(new OnItemClickListener() {
    @Override
    public void onItemClick(AdapterView<?> a, final View v, final int position, long id) {

        positionSelected = position;

        SearchResultListViewItem selectedRow = results.get(position);
        String selectedItem = selectedRow.getItemName();
        itemBarcode = selectedRow.getBarcode();

        itemListDB.open();

        ItemDialog itemDialog = new ItemDialog();

        itemDialog.itemName = selectedItem;
        itemDialog.brandName = itemListDB.getBrandFromItemBarcode(itemBarcode);
        itemDialog.UOMName = itemListDB.getUOMFromItemBarcode(itemBarcode);
        itemDialog.priceName = itemListDB.getPriceFromItemBarcode(itemBarcode);
        itemDialog.discountName = itemListDB.getDiscountFromItemBarcode(itemBarcode);
        itemDialog.mListener = SearchResult.this;

        itemDialog.qtyFromList = qtyInput.get(position);
        itemDialog.discFromList = qtyInput.get(position);

        itemListDB.close();
        itemDialog.show(getFragmentManager(), "");

    }
});

这是我的ItemDialog课程:

代码语言:javascript
复制
public class ItemDialog extends DialogFragment implements OnClickListener{

    //my variables go over here

    public interface onSubmitListener {
        void setOnSubmitListener(String qty, String disc);  
    }  

    @Override  
    public Dialog onCreateDialog(Bundle savedInstanceState) {  

        final Dialog dialog = new Dialog(getActivity());  
        dialog.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,  
                WindowManager.LayoutParams.FLAG_FULLSCREEN);  

        dialog.setContentView(R.layout.fragment_item_dialog);  
        setStyle(DialogFragment.STYLE_NORMAL, R.style.MyDialog);

        File imgFile = new  File("/sdcard/Images/test_image.png");
        if(imgFile.exists()){

            Bitmap myBitmap = BitmapFactory.decodeFile(imgFile.getAbsolutePath());

            ImageView myImage = (ImageView) findViewById(R.id.imageViewItem);
            myImage.setImageBitmap(myBitmap);

        }

        dialog.setTitle("Item Details");
        dialog.show();  
        //I set more variables here       
        return dialog;  
    }       

}

那么,有没有人知道如何设置imageView在DialogFragment中的源映像呢?我被困在这里,坦白地说,我不知道该怎么做,如果有人能帮我,我会非常感激的。

谢谢。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2014-05-23 08:44:40

您需要在inflate下在Dialog Fragment中进行onCreateDialog(...)布局

代码语言:javascript
复制
  LayoutInflater layoutInflater = (LayoutInflater) getActivity()
         .getSystemService(Context.LAYOUT_INFLATER_SERVICE);

  View layout2 = layoutInflater.inflate(R.layout.contact_filter_popup,null);

  dialog.setView(layout2);

然后将您的Imageview引用到特定的layout

代码语言:javascript
复制
   ImageView img=(ImageView)layout2.findViewById(R.id.imageViewItem);

更新:

代码语言:javascript
复制
@Override  
public Dialog onCreateDialog(Bundle savedInstanceState) {  

    final Dialog dialog = new Dialog(getActivity());  

    dialog.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,  
            WindowManager.LayoutParams.FLAG_FULLSCREEN);  


     LayoutInflater layoutInflater = (LayoutInflater) getActivity()
         .getSystemService(Context.LAYOUT_INFLATER_SERVICE);

    View layout2 = layoutInflater.inflate(R.layout.contact_filter_popup,null);
    dialog.setContentView(layout2);  

    setStyle(DialogFragment.STYLE_NORMAL, R.style.MyDialog);

    ImageView myImage = (ImageView) layout2.findViewById(R.id.imageViewItem);

    File imgFile = new  File("/sdcard/Images/test_image.png");

    if(imgFile.exists()){

        Bitmap myBitmap = BitmapFactory.decodeFile(imgFile.getAbsolutePath());
        myImage.setImageBitmap(myBitmap);

    }

    dialog.setTitle("Item Details");
    dialog.show();  

    return dialog;  
}       
票数 6
EN

Stack Overflow用户

发布于 2014-05-23 08:48:46

问题是由于生命周期错配造成的。在对话框片段中,当对话框被创建时,并不意味着视图被创建。这将导致IllegalArgumentException,因为片段没有附着在活动上。要克服这一问题,始终在视图在onViewsCreated()/onCreateViews()方法中膨胀之后使用/访问视图。在下面找到我的解决方案,这样做很好。

代码语言:javascript
复制
public class ImageDetailDialog extends DialogFragment implements OnClickListener{

    private String url ;

    private ImageView imgProdDetail;


    /* (non-Javadoc)
     * @see android.support.v4.app.DialogFragment#onCreate(android.os.Bundle)
     */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        url = getArguments().getString("url");
        setStyle(DialogFragment.STYLE_NO_TITLE, R.style.product_dialog);
    }

    /* (non-Javadoc)
     * @see android.support.v4.app.Fragment#onCreateView(android.view.LayoutInflater, android.view.ViewGroup, android.os.Bundle)
     */
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.image_detail_dialog, null);
        imgProdDetail = (ImageView)view.findViewById(R.id.img_prod_detail);
        view.setOnClickListener(this);
        return view;
    }

    /* (non-Javadoc)
     * @see android.support.v4.app.Fragment#onViewCreated(android.view.View, android.os.Bundle)
     */
    @Override
    public void onViewCreated(View view, Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);

            /** Decode/load YOUR IMAGE HERE **/
        imgProdDetail.setImageResource(R.drawable.image);
    }

    /* (non-Javadoc)
     * @see android.support.v4.app.DialogFragment#onCreateDialog(android.os.Bundle)
     */
    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        Dialog dialog = super.onCreateDialog(savedInstanceState);
        dialog.getWindow().requestFeature(Window.FEATURE_NO_TITLE);
        //not working
        dialog.setCanceledOnTouchOutside(true);
        return dialog;
    }

    /* (non-Javadoc)
     * @see android.view.View.OnClickListener#onClick(android.view.View)
     */
    @Override
    public void onClick(View v) {
        if(v!=imgProdDetail)
            this.dismissAllowingStateLoss();
    }

}
票数 2
EN

Stack Overflow用户

发布于 2014-05-23 08:45:32

片段没有findViewById方法,您可以在th片段的getView()方法上调用它:

代码语言:javascript
复制
  File imgFile = new  File(“/sdcard/Images/test_image.jpg”);
  if(imgFile.exists()){
    Bitmap myBitmap = BitmapFactory.decodeFile(imgFile.getAbsolutePath());
    ImageView myImage = (ImageView) getView().findViewById(R.id.imageViewItem);
    myImage.setImageBitmap(myBitmap);
  }

我假设您已经夸大了DialogFragment的相应视图。

有关更多信息:http://developer.android.com/reference/android/app/Fragment.html#getView()

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23824599

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档