Guixe94
26/07/14, 13:37:49
Hola,
yo tenia mi app toda con miles de actividades pero ahora la estoy reaciendo con fragments voy tirando pero me he encontrado con un problema.
Resulta que tengo una actividad con dos ScrollViews uno visible y otro no y al realizar una compra integrada pues se intercambian los estados ( el que estava visible pasa a invisible y a la inversa). Con la actividad era muy facil por que en su clase llamaba a los scrollsviews por su id con el siguiente codigo:
private ScrollView scrollpro1;
private ScrollView scrollpro2;
Pero ahora al pasarlo a fragments tengo un problema.. si pongo ese codigo no me funciona ya que me busca esas id's en la actividad principal (MainActivity) que es donde llamo a mostrar a los fragments pero claro los scrollviews no estan en ese .xml si no que estan en el del fragment..
No puedo llamar directamente al boton y decirle que me lo cambie ya que dependiendo de si el producto se compra o no pues se ve el primero o el segundo..
Cuando llamo al boton utilizo este codigo:
public void boton(View view) {
Intent intent = new Intent(this, MainActivity.class);
startBuyProcess();
}
y El proceso de compra es este:
///// compras
private void startBuyProcess(){
String clave = "MI CLAVEEEEEEEEE";
billingHelper = new IabHelper(this, clave);
billingHelper.startSetup(this);
}
@Override
public void onIabSetupFinished(IabResult result) {
if (result.isSuccess()) {
try{
if(billingHelper.queryInventory(true, null).hasPurchase(MainActivity.SKU)){
Toast.makeText(this, "Licencia Correcta", Toast.LENGTH_SHORT).show();
// startActivity(new Intent(MainActivity.this,Pro.class));
scrollpro1.setVisibility(View.GONE);
scrollpro2.setVisibility(View.VISIBLE);
compraCorrecta();
} else {
compraElemento();
}
} catch(IabException e){
e.printStackTrace();
}
} else {
errorAlIniciar();
}
}
protected void errorAlIniciar() {
Toast.makeText(MainActivity.this, "Error al intentar iniciar la compra", Toast.LENGTH_SHORT).show();
}
protected void compraElemento() {
purchaseItem(PurchaseActivity.SKU);
}
protected void purchaseItem(String sku) {
billingHelper.launchPurchaseFlow(this, sku, 123, this);
}
@Override
public void onIabPurchaseFinished(IabResult result, Purchase info) {
if (result.isFailure()) {
compraFallida();
} else if (MainActivity.SKU.equals(info.getSku())) {
compraCorrecta();
// Consumimos los elementos a fin de poder probar varias compras
billingHelper.consumeAsync(info, null);
}
}
/*
* COSAS QUE QUERAMOS HACER CUANDO SE HAYA
* ADQUIRIDO EL PRODUCTO CON EXITO
*/
protected void compraCorrecta() {
boton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
// startActivity(new Intent(MainActivity.this,Pro.class));
scrollpro1.setVisibility(View.GONE);
scrollpro2.setVisibility(View.VISIBLE);
}
});
}
/*
* COSAS QUE QUERAMOS HACER CUANDO EL PRODUCTO
* NO HAYA SIDO ADQUIRIDO
*/
protected void compraFallida(){
}
//LIMPIAMOS
@Override
protected void onDestroy() {
disposeBillingHelper();
super.onDestroy();
}
private void disposeBillingHelper() {
if (billingHelper != null) {
billingHelper.dispose();
}
billingHelper = null;
}
private Boolean isUpgrade(Context context)
{
SharedPreferences prefs = context.getSharedPreferences("prefs", Context.MODE_PRIVATE);
return prefs.getBoolean("upgrade", false);
}
private void setUpgrade(Context context, Boolean value)
{
SharedPreferences prefs = context.getSharedPreferences("prefs", Context.MODE_PRIVATE);
SharedPreferences.Editor edit = prefs.edit();
edit.putBoolean("upgrade", value);
edit.commit();
}
///// Fin compras
Y aqui es donde me peta ya que intenta cambiar la visibilidad de esos scrollviews pero no los encuentra en activity_main.xml por que estan en el fragment purchase.xml
if(billingHelper.queryInventory(true, null).hasPurchase(MainActivity.SKU)){
Toast.makeText(this, "Licencia Correcta", Toast.LENGTH_SHORT).show();
// startActivity(new Intent(MainActivity.this,Pro.class));
scrollpro1.setVisibility(View.GONE);
scrollpro2.setVisibility(View.VISIBLE);
compraCorrecta();
Como podria llamar a esos scrollviews que no estan en la actividad principal? Hay alguna manera?
SOLUCIONADO
Al final utilice este codigo gracias a las dos respuestas recibidas y conseguí hacerlo funcionar!
getSupportFragmentManager().findFragmentById(R.id. content_frame);
scrollpro1 = (ScrollView)findViewById(R.id.scrollpro1);
scrollpro2 = (ScrollView)findViewById(R.id.scrollpro2);
Gracias
yo tenia mi app toda con miles de actividades pero ahora la estoy reaciendo con fragments voy tirando pero me he encontrado con un problema.
Resulta que tengo una actividad con dos ScrollViews uno visible y otro no y al realizar una compra integrada pues se intercambian los estados ( el que estava visible pasa a invisible y a la inversa). Con la actividad era muy facil por que en su clase llamaba a los scrollsviews por su id con el siguiente codigo:
private ScrollView scrollpro1;
private ScrollView scrollpro2;
Pero ahora al pasarlo a fragments tengo un problema.. si pongo ese codigo no me funciona ya que me busca esas id's en la actividad principal (MainActivity) que es donde llamo a mostrar a los fragments pero claro los scrollviews no estan en ese .xml si no que estan en el del fragment..
No puedo llamar directamente al boton y decirle que me lo cambie ya que dependiendo de si el producto se compra o no pues se ve el primero o el segundo..
Cuando llamo al boton utilizo este codigo:
public void boton(View view) {
Intent intent = new Intent(this, MainActivity.class);
startBuyProcess();
}
y El proceso de compra es este:
///// compras
private void startBuyProcess(){
String clave = "MI CLAVEEEEEEEEE";
billingHelper = new IabHelper(this, clave);
billingHelper.startSetup(this);
}
@Override
public void onIabSetupFinished(IabResult result) {
if (result.isSuccess()) {
try{
if(billingHelper.queryInventory(true, null).hasPurchase(MainActivity.SKU)){
Toast.makeText(this, "Licencia Correcta", Toast.LENGTH_SHORT).show();
// startActivity(new Intent(MainActivity.this,Pro.class));
scrollpro1.setVisibility(View.GONE);
scrollpro2.setVisibility(View.VISIBLE);
compraCorrecta();
} else {
compraElemento();
}
} catch(IabException e){
e.printStackTrace();
}
} else {
errorAlIniciar();
}
}
protected void errorAlIniciar() {
Toast.makeText(MainActivity.this, "Error al intentar iniciar la compra", Toast.LENGTH_SHORT).show();
}
protected void compraElemento() {
purchaseItem(PurchaseActivity.SKU);
}
protected void purchaseItem(String sku) {
billingHelper.launchPurchaseFlow(this, sku, 123, this);
}
@Override
public void onIabPurchaseFinished(IabResult result, Purchase info) {
if (result.isFailure()) {
compraFallida();
} else if (MainActivity.SKU.equals(info.getSku())) {
compraCorrecta();
// Consumimos los elementos a fin de poder probar varias compras
billingHelper.consumeAsync(info, null);
}
}
/*
* COSAS QUE QUERAMOS HACER CUANDO SE HAYA
* ADQUIRIDO EL PRODUCTO CON EXITO
*/
protected void compraCorrecta() {
boton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
// startActivity(new Intent(MainActivity.this,Pro.class));
scrollpro1.setVisibility(View.GONE);
scrollpro2.setVisibility(View.VISIBLE);
}
});
}
/*
* COSAS QUE QUERAMOS HACER CUANDO EL PRODUCTO
* NO HAYA SIDO ADQUIRIDO
*/
protected void compraFallida(){
}
//LIMPIAMOS
@Override
protected void onDestroy() {
disposeBillingHelper();
super.onDestroy();
}
private void disposeBillingHelper() {
if (billingHelper != null) {
billingHelper.dispose();
}
billingHelper = null;
}
private Boolean isUpgrade(Context context)
{
SharedPreferences prefs = context.getSharedPreferences("prefs", Context.MODE_PRIVATE);
return prefs.getBoolean("upgrade", false);
}
private void setUpgrade(Context context, Boolean value)
{
SharedPreferences prefs = context.getSharedPreferences("prefs", Context.MODE_PRIVATE);
SharedPreferences.Editor edit = prefs.edit();
edit.putBoolean("upgrade", value);
edit.commit();
}
///// Fin compras
Y aqui es donde me peta ya que intenta cambiar la visibilidad de esos scrollviews pero no los encuentra en activity_main.xml por que estan en el fragment purchase.xml
if(billingHelper.queryInventory(true, null).hasPurchase(MainActivity.SKU)){
Toast.makeText(this, "Licencia Correcta", Toast.LENGTH_SHORT).show();
// startActivity(new Intent(MainActivity.this,Pro.class));
scrollpro1.setVisibility(View.GONE);
scrollpro2.setVisibility(View.VISIBLE);
compraCorrecta();
Como podria llamar a esos scrollviews que no estan en la actividad principal? Hay alguna manera?
SOLUCIONADO
Al final utilice este codigo gracias a las dos respuestas recibidas y conseguí hacerlo funcionar!
getSupportFragmentManager().findFragmentById(R.id. content_frame);
scrollpro1 = (ScrollView)findViewById(R.id.scrollpro1);
scrollpro2 = (ScrollView)findViewById(R.id.scrollpro2);
Gracias