//LISTENER PER IL BOTTONE IMGBUTTON CHE MODIFICA LE IMMAGINI: imgButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent intent=new Intent(); intent.setAction(Intent.ACTION_PICK); intent.setData(Uri.parse("content://media/external/images/media")); startActivityForResult(intent, 0); } });che rimanda a:
//ONACTIVITYRESULT PER IMGBUTTON CHE MODIFICA LE IMMAGINI protected void onActivityResult(int requestCode , int resultCode, Intent data){ if(resultCode==RESULT_OK){ Uri uri= data.getData(); String path=Funzioni.UriToPath(this, uri); byte[] b=Funzioni.PathToByteArray(path, 100, 50); //estraiamo il testo di etichetta e categoria TextView et=(TextView)((ViewGroup)ActiveOne).getChildAt(numEtichetta); TextView cat=(TextView)((ViewGroup)ActiveOne).getChildAt(numCategoria); helper.imgUpdate(et.getText().toString(), cat.getText().toString(), b); imgButton.setVisibility(View.INVISIBLE); button.setVisibility(View.INVISIBLE); refreshScreen(); } }L'abbozzo del progetto sarebbe, in imitazione al codice che crea una nuova immagine, aprire l'activity per la modifica e far updatare a questa stessa il database.
ActiveOne si riferisce al gruppo di views che esprimono l'immagine nel mainLayout, qui definite:
//EVENTLISTENER DELLE IMMAGINI PER MOVIMENTO O AZIONE.
onTouchListener=new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
X=(int) event.getRawX();
Y=(int) event.getRawY();
switch(event.getAction()){
case MotionEvent.ACTION_DOWN:
if(settingMode){
scrollView.requestDisallowInterceptTouchEvent(true);
RelativeLayout.LayoutParams lp=(RelativeLayout.LayoutParams)v.getLayoutParams();
DeltaX=X-lp.leftMargin;
DeltaY=Y-lp.topMargin;
ActiveOne=(LinearLayout)v;
for(int i=0;i<mainLayout.getChildCount();i++){
((ViewGroup)mainLayout.getChildAt(i)).getChildAt(numEtichetta).setBackgroundColor(Color.WHITE);
ActiveOne.getChildAt(numEtichetta).setBackgroundColor(Color.YELLOW);
}
button.setVisibility(View.VISIBLE);
imgButton.setVisibility(View.VISIBLE);
}
break;
case MotionEvent.ACTION_MOVE:
if(settingMode){
RelativeLayout.LayoutParams lp=(RelativeLayout.LayoutParams)v.getLayoutParams();
lp.leftMargin=X-DeltaX;
lp.topMargin=Y-DeltaY;
v.setLayoutParams(lp);
}
break;
case MotionEvent.ACTION_UP:
if(settingMode){
TextView et=(TextView)((ViewGroup)v).getChildAt(numEtichetta);
TextView cat=(TextView)((ViewGroup)v).getChildAt(numCategoria);
helper.Update(et.getText().toString(), cat.getText().toString(),v.getLeft(), v.getTop());
}
else{
TextView t=(TextView) ((ViewGroup)v).getChildAt(numTipo);
if(t.getText().equals("categoria")){
String s=(String) ((TextView)((ViewGroup)v).getChildAt(numEtichetta)).getText();
//questo è il punto in cui cliccando un'immagine che sia
//tipo "categoria" si ha lo pseudo-cambiamento di schermata
//secondo la categoria.
currentCat=s;
refreshScreen();
if(s.equals("iniziale")) bttIniziale.setVisibility(View.INVISIBLE);
else bttIniziale.setVisibility(View.VISIBLE);
}
else {
TextView e=(TextView) ((ViewGroup)v).getChildAt(numEtichetta);
tts.speak(e.getText().toString(), TextToSpeech.QUEUE_FLUSH, null);
txtTesto.setText(txtTesto.getText()+" "+e.getText());
}
}
}
return true;
}
};
...dichiarata come LinearLayout inizialmente.Fornendo quindi all'activity Modifica i dati, essa stessa updaterà il database.
Per cominciare, oscuro il codice originale del listener del pulsante "modifica immagine" e vi sostituisco un codice che mi mostra etichetta e tipo (categoria) dell'immagine, in previsione di mandarlo alla nuova Activity per mezzo di un intent esplicito:
//LISTENER PER IL BOTTONE IMGBUTTON CHE MODIFICA LE IMMAGINI:
imgButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
TextView et=(TextView)((ViewGroup)ActiveOne).getChildAt(numEtichetta);
TextView cat=(TextView)((ViewGroup)ActiveOne).getChildAt(numCategoria);
Log.e("NOME E TIPO",et.getText().toString()+" "+cat.getText().toString());
/*
Intent intent=new Intent();
intent.setAction(Intent.ACTION_PICK);
intent.setData(Uri.parse("content://media/external/images/media"));
startActivityForResult(intent, 0);*/
}
});
E ottengo risultato positivo:
06-02 21:08:47.587: E/NOME E TIPO(13350): lecca lecca iniziale
06-02 21:08:49.589: E/NOME E TIPO(13350): cibi iniziale
Okay.Adesso posso impostare la nuova activity per usarvi l'intent esplicito. Ecco, ho creato la nuova Activity con un'Immagine:
public class Modifica extends Activity { RelativeLayout mainLayout; Immagine img; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_modifica); mainLayout=(RelativeLayout)findViewById(R.id.mainLayout); //creo una nuova istanza di Immagine, chiamata img. img=new Immagine(this); mainLayout.addView(img); img.getLayoutParams().width=300; img.getLayoutParams().height=300; img.setX(50); img.setY(70); } }Adesso devo trasmettervi anche i dati dell'immagine che contiene.
Cominciamo a creare l'intent.
//LISTENER PER IL BOTTONE IMGBUTTON CHE MODIFICA LE IMMAGINI:
imgButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
TextView et=(TextView)((ViewGroup)ActiveOne).getChildAt(numEtichetta);
TextView cat=(TextView)((ViewGroup)ActiveOne).getChildAt(numCategoria);
Intent intent=new Intent(MainActivity.this,Modifica.class);
startActivity(intent);
/*
Intent intent=new Intent();
intent.setAction(Intent.ACTION_PICK);
intent.setData(Uri.parse("content://media/external/images/media"));
startActivityForResult(intent, 0);*/
}
});
E per il momento ottengo solo la visualizzazione della nuova Activity che non fa, ancora, assolutamente nulla.Ora devo trasmettere i dati...
Come si trasmettono? Con putExtra.
Andiamo...
Ecco: trasmetto...
//LISTENER PER IL BOTTONE IMGBUTTON CHE MODIFICA LE IMMAGINI: imgButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { TextView et=(TextView)((ViewGroup)ActiveOne).getChildAt(numEtichetta); TextView cat=(TextView)((ViewGroup)ActiveOne).getChildAt(numCategoria); Intent intent=new Intent(MainActivity.this,Modifica.class); intent.putExtra("etichetta", et.getText()); intent.putExtra("categoria",cat.getText()); startActivity(intent); /* Intent intent=new Intent(); intent.setAction(Intent.ACTION_PICK); intent.setData(Uri.parse("content://media/external/images/media")); startActivityForResult(intent, 0);*/ } });...e ricevo dall'Activity Modifica:
public class Modifica extends Activity { RelativeLayout mainLayout; Immagine img; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_modifica); Bundle extras=getIntent().getExtras(); String etichetta=extras.getString("etichetta"); String categoria=extras.getString("categoria"); Log.e(etichetta,categoria);
06-02 21:29:27.347: E/lecca lecca(16426): iniziale
06-02 21:29:37.086: E/cibi(16426): iniziale
Adesso la sfida successiva è trasmettere l'immagine perché appaia nell'immagine dell'Activity Modifica...
Nessun commento:
Posta un commento