0

Android アプリで何らかのログ プロシージャを作成したいと考えています。ユーザーが画面のどこを押しているか (3 回) を検出し、そこからログ シーケンスを作成することができました。最後に、選択したロギング シーケンスを表す 3 つの画像を表示したい (ドローアブル フォルダーから)

ドローアブル ID を動的に設定しましたが、メイン レイアウトに画像を配置すると機能します。しかし、カスタムダイアログ内に画像を配置すると、強制的に閉じられます。LogCat から次のように表示されます: java.lang.NullPointerException at 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();

誰でもこれで私を助けてくれますか? 私はこれについて2日間頭を悩ませています。ありがとうございました。

4

3 に答える 3

1

findViewById が失敗しています。したがって、NullPointerException が発生しています。

 ImageView image1 = (ImageView) findViewById(R.id.imgDrugi); 

する必要があります

ImageView image1 = (ImageView) dialog.findViewById(R.id.imgDrugi);
于 2013-03-21T09:20:24.210 に答える
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));

また

これにより、アクセスしたいドローアブルのIDが返されます...次に、次のようにしてイメージビューにイメージを設定できます

 int id = getResources().getIdentifier("yourpackagename:drawable/" + StringGenerated, null, null);
imageview.setImageResource(id);
于 2013-03-21T09:20:57.797 に答える
0

これを試して:

image1.setImageDrawable(getResources().getDrawable(iIdSlike));
于 2013-03-21T09:20:29.297 に答える