我有一个应用程序,其中我有一个自定义的listView,在单击listView中的任何项目时,都会显示一个DialogFramgent。现在,我要做的是将DialogFramgent中的DialogFramgent设置为外部存储中的图像。我知道我可以将imageView的源设置为这样:
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:
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课程:
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中的源映像呢?我被困在这里,坦白地说,我不知道该怎么做,如果有人能帮我,我会非常感激的。
谢谢。
发布于 2014-05-23 08:44:40
您需要在inflate下在Dialog Fragment中进行onCreateDialog(...)布局
LayoutInflater layoutInflater = (LayoutInflater) getActivity()
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View layout2 = layoutInflater.inflate(R.layout.contact_filter_popup,null);
dialog.setView(layout2);然后将您的Imageview引用到特定的layout
ImageView img=(ImageView)layout2.findViewById(R.id.imageViewItem);更新:
@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;
} 发布于 2014-05-23 08:48:46
问题是由于生命周期错配造成的。在对话框片段中,当对话框被创建时,并不意味着视图被创建。这将导致IllegalArgumentException,因为片段没有附着在活动上。要克服这一问题,始终在视图在onViewsCreated()/onCreateViews()方法中膨胀之后使用/访问视图。在下面找到我的解决方案,这样做很好。
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();
}
}发布于 2014-05-23 08:45:32
片段没有findViewById方法,您可以在th片段的getView()方法上调用它:
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()
https://stackoverflow.com/questions/23824599
复制相似问题