我想在我的Android应用中创建某种日志记录程序。 我设法检测用户在屏幕上按下的位置(三次)并从中创建记录序列。 最后,我想显示3个代表所选记录序列的图像(来自我的drawable文件夹)
我动态设置了可绘制的ID,当我将图像放在主布局上时,它可以正常工作。
但是,如果我将图像放在自定义对话框中,我会强制关闭。
从LogCat我看到以下内容: java.lang.NullPointerException image1.setImageResource(iIdSlike);
如果我将可绘制ID显示为文本,那么主要和自定义对话框布局上的ID是相同的。
即使我像这样设置图像(非动态),我也会强制关闭:
image1.setImageResource(R.drawable.s11);
为什么我无法在自定义对话框上显示图像?
这是我的dijalog.xml(自定义对话框布局):
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<ImageView
android:id="@+id/imgDrugi"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignRight="@+id/TextView01"
android:layout_below="@+id/TextView01"
android:layout_marginRight="27dp"
android:layout_marginTop="51dp"
/>
<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_alignParentRight="true"
android:text="Button" />
<TextView
android:id="@+id/TextView01"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:layout_marginTop="118dp"
android:text="@+id/TextView01" />
</RelativeLayout>
这是我的代码:
public class MyWorkLogiranje extends Activity implements OnClickListener
{
@Override
public boolean onTouchEvent(MotionEvent event)
{
switch(event.getAction())
{
case MotionEvent.ACTION_DOWN:
.
.
.
//calculations to get string sPrvi
sPrvi="s31"; //For testing purposes sPrvi set manually
//Image and text on main layout (it works)
iIdSlike = getResources().getIdentifier(sPrvi, "drawable", getPackageName());
ImageView image = (ImageView) findViewById(R.id.imgPrvi);
image.setImageResource(iIdSlike);
TextView text1 = (TextView)findViewById(R.id.txtPrvi);
text1.setText("iIdSlike: " + iIdSlike);
//Prikaz dijaloga
final Dialog dialog = new Dialog(MyWorkLogiranje.this);
dialog.setContentView(R.layout.dijalog);
dialog.setTitle("This is my custom dialog box");
dialog.setCancelable(true);
dialog.getContext();
TextView text = (TextView) dialog.findViewById(R.id.TextView01);
text.setText("iIdSlike: " + iIdSlike);
ImageView image1 = (ImageView) findViewById(R.id.imgDrugi);
image1.setImageResource(R.drawable.iIdSlike);
//image1.setImageResource(R.drawable.s11);
//Podešavanje dugmeta
Button button = (Button) dialog.findViewById(R.id.button1);
button.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View v)
{
dialog.dismiss();
}
});
dialog.show();
有人可以帮我吗? 关于这个问题,我两天都在摸不着头脑。 谢谢。
答案 0 :(得分:1)
你的findViewById失败了。所以你得到NullPointerException。
ImageView image1 = (ImageView) findViewById(R.id.imgDrugi);
应该是
ImageView image1 = (ImageView) dialog.findViewById(R.id.imgDrugi);
答案 1 :(得分:0)
试试这个:
image1.setImageDrawable(getResources().getDrawable(iIdSlike));
答案 2 :(得分:0)
在此之前,请在对话框代码中添加:
ImageView image1 = (ImageView) dialog.findViewById(R.id.imgDrugi);
您可以这样使用:
Drawable image = ImageOperations(context,ed.toString(),"image.jpg");
ImageView imgView = new ImageView(context);
imgView = (ImageView)findViewById(R.id.image1);
imgView.setImageDrawable(image);
或
setImageDrawable(getResources().getDrawable(R.drawable.icon));
或
这将返回您想要访问的drawable的id ...然后您可以通过执行以下操作在imageview中设置图像
int id = getResources().getIdentifier("yourpackagename:drawable/" + StringGenerated, null, null);
imageview.setImageResource(id);