2012-04-17 15 views
0

ボタンクリックでダイアログボックスを作成しています。このために、私はDialogを拡張するクラスを作成しました。私は、このXMLファイルに各テキストビューのオプションを含むXMLファイルを作成しました(and all:text view [7 text view])。これはタグandroid:onClick = "imageProcessingHandler"を定義しました。アクティビティからボタンをクリックすると、ダイアログボックスが開きます。今私は任意のテキストビューをクリックするとエラーが発生していますつまり、定義されていない関数です。 Dialogを拡張するpublicとしてこの関数をクラスで定義しました。誰でも助けてくれますか?イベント処理ダイアログボックス

Imageviewにアクセスする場合はもう1つ、 Dialogボックスが開かれたアクティビティのDialogを拡張するクラスで、どうすればこのことができますか? 私は以下を実行しようとしています: ImageView imgView =(ImageView)findViewById(R.id.fullphoto);しかし、この場合にはimgViewはNULL値が含まれています:(

コード:

ShowOptionsInDialog displayDialog = new ShowOptionsInDialog(this, passedData); 
displayDialog.show(); 

ShowOptionsInDialogクラス::

public class ShowOptionsInDialog extends Dialog{ 

private Context context; 

public ShowOptionsInDialog(Context context, ArrayList<String> data) { 
    super(context); 
    this.context = (Context) context; 
} 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    setContentView(R.layout.imageprocessingoptions); 
    setTitle("Try options"); 
} 

public void imageProcessingHandler(View view){ 
ImageView photo = (ImageView) findViewById(R.id.fullphoto); 
} 
活動から

"MyActivity" をボタンの上に私のようにオブジェクトを作成していますクリックしてください

imageprocessingoptions.XML

<TextView 
    android:id="@+id/invertColorText" 
    android:layout_width="wrap_content" 
    android:layout_height="match_parent" 
    android:cursorVisible="false" 
    android:paddingLeft="10dp" 
    android:paddingBottom="5dp" 
    android:gravity="bottom" 
    android:text="Invert Color" 
    android:textSize="15dp" 
    android:clickable="true" 
    android:onClick="imageProcessingHandler" /> 

アクティビティコード:

public class PhotoHandler extends Activity { 
private Bundle intentExtra; 
private String photoID; 

private CommomObject _commonObject; 
private Facebook facebook; 

private ImageView photo; 
private DownloadImageTask downlaodImageTask; 

private ProgressDialog progDialog; 

@Override 
public void onCreate(Bundle savedInstanceState){ 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.photohandler); 

    intentExtra = getIntent().getExtras(); 
    photoID = intentExtra.getString("PHOTO_ID"); 

    displayPhoto(); 
} 

private void displayPhoto() { 
    _commonObject = CommomObject.getInstance(); 
    facebook = _commonObject.getFacebookInstance(); 
    String imageURL = "https://graph.facebook.com/"+photoID+"/picture?type=normal&access_token="+facebook.getAccessToken(); 
    photo = (ImageView) findViewById(R.id.fullphoto); 
    photo.setTag(imageURL); 
    photo.setScaleType(ScaleType.FIT_CENTER); 
    downlaodImageTask = new DownloadImageTask(); 
    progDialog = new ProgressDialog(this); 
    progDialog.setMessage("Fetching photo..."); 
    progDialog.show(); 
    downlaodImageTask.execute(photo); 
} 

public class DownloadImageTask extends AsyncTask<ImageView, Void, Bitmap>{ 
    ImageView imageView = null; 

    @Override 
    protected Bitmap doInBackground(ImageView... imageViews){ 
     this.imageView = imageViews[0]; 
     return downloadImage((String)imageView.getTag()); 
    } 

    @Override 
    protected void onPostExecute(Bitmap result) { 
     imageView.setImageBitmap(result); 
    } 

    private Bitmap downloadImage(String url) { 

     Bitmap photo = null; 

     try { 

      URL u = new URL(url); 
      URLConnection c = u.openConnection(); 
      c.connect(); 
      BufferedInputStream stream = new BufferedInputStream(c.getInputStream()); 
      photo = BitmapFactory.decodeStream(stream); 
      stream.close(); 

     } catch (MalformedURLException e) { 
      Log.e("PhotoHandler", "malformed url: " + url); 
     } catch (IOException e) { 
      Log.e("PhotoHandler", "An error has occurred downloading the image: " + url); 
     } 
     progDialog.dismiss(); 
     return photo; 
    } 
} 

public void footerHandler(View view){ 
    switch(view.getId()){ 
    case R.id.useButton: 
     break; 
    case R.id.saveButton: 
     break; 
    case R.id.shareButton: 
     break; 
    case R.id.photoEffect: 
     ArrayList<String> passedData = new ArrayList<String>(); 
     ShowOptionsInDialog displayDialog = new ShowOptionsInDialog(this, passedData); 
     displayDialog.show(); 
     break; 
    } 
} 

public void imageProcessingHandler(View view){ 
    switch(view.getId()){ 
    case R.id.invertColorText: 
     Bitmap newBitmap = ImageProcessing.doInvert(photo.getDrawingCache()); 
     photo.setImageBitmap(newBitmap); 
     break; 
    case R.id.greyScaleText: 
     break; 
    case R.id.gammaCorrectionText: 
     break; 
    case R.id.sepiaEffectText: 
     break; 
    case R.id.embossingEffectText: 
     break; 
    case R.id.reflectionEffectText: 
     break; 
    case R.id.contrastText: 
     break; 
    } 
} 
} 

答えて

0

を使用します。

TextView invert = (TextView) findViewById(R.id.invertColorText); 
invert.setOnClickListener(new View.OnClickListener() { 

@Override 
public void onClick(View v) { 
// do your work here 
}); 

とダイアログ上でImageViewのを取得するために私が活動からDailogでそれを渡されました。

0

1 - あなたはあなたのダイアログクラスであなたのpublic void abcFunction(View view)を配置する必要があります。

2 - 私のように私のコードでリスナーをonCliclk実装yourdialog.findViewById(R.id.fullphoto);

+0

申し訳ありませんが、どうすれば2番目の実装ができないと思いますか?そして1日目にも私はそれを試しました。 –

+0

ImageViewはメソッド上でのみインスタンス化されるため、ImageViewはnullです。メソッドが機能しない場合、イメージにはnullが含まれます。 –

+0

ところで、ImageViewはダイアログXMLからですか? 'context.findViewById(R.id.yourimageview)'を試してください。 –