2012-04-17 3 views
0

Я создаю диалоговое окно при нажатии кнопки. Для этого я создал класс, расширяющий Dialog. Я создал XML-файл, который содержит параметры (все это текстовый вид [7 текстовый вид]) в этом XML-файле для каждого текстового представления. Я определил тег android: onClick = "imageProcessingHandler". Когда я нажимаю кнопку из действия, открывается диалоговое окно, в котором все нормально. Теперь, когда я нажимаю на любое текстовое изображение, я получаю ошибку, т. Е. Функция не определена. Я определил эту функцию в классе как public, которая расширяет Dialog. Кто-нибудь может помочь?Обработка событий из диалогового окна

Еще одна вещь, если я хочу получить доступ к Imageview; в классе, который расширяет Dialog, активности, из которого было открыто диалоговое окно, и как я мог это сделать? Я пытаюсь сделать следующее: ImageView imgView = (ImageView) findViewById (R.id.fullphoto); но в этом случае imgView содержит нулевое значение :(

Код:

от деятельности "MyActivity" на кнопку мыши Я создаю объект как:

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); 
} 

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

я реализую onCliclk слушателя в моем коде, как:

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 - использовать yourdialog.findViewById(R.id.fullphoto);

+0

Извините, но как я мог реализовать 2-й, я думаю, что это невозможно. И для 1-го я тоже попробовал. –

+0

Хорошо, что ваш ImageView имеет значение null, поскольку он создан только для метода, и если метод не работает, изображение будет содержать нуль. –

+0

Кстати, это ImageView из диалогового окна xml? Если нет, попробуйте 'context.findViewById (R.id.yourimageview)' –

Смежные вопросы