Tim*_*Tim 6 android transition android-intent android-context android-activity
我正在使用另一个类在后台运行一些东西,同时显示主要活动,并将该活动的上下文传递给此背景类.我正在从这个后台类开始另一个活动,但是我无法在overridePendingTransition这里调用,因为对于类型BackgroundClass,"方法overridePendingTransition(int,int)是未定义的."
public class GetUPC extends AsyncTask<Void, Void, Void>
{
@Override
protected void onPreExecute()
{
...
}
@Override
protected Void doInBackground(Void... arg0)
{
...
boolean dairy;
if(theDairy.equals("N"))
{
//milk test
dairy=true;
}
else
{
dairy=false;
}
//depending on if there is a warning it will either display the warning screen or skip it
if(dairy)
{
Intent intent_warn = new Intent(context, WarningScreen.class);
intent_warn.putExtra("Name", str_name);
intent_warn.putExtra("Size", str_size);
intent_warn.putExtra("Price", str_price);
intent_warn.putExtra("Carbs", str_carbs);
intent_warn.putExtra("Protein", str_protein);
intent_warn.putExtra("Fiber", str_fiber);
intent_warn.putExtra("Sugar", str_sugar);
intent_warn.putExtra("SatFat", str_satFat);
intent_warn.putExtra("TotFat", str_totFat);
intent_warn.putExtra("Cholesterol", str_cholesterol);
intent_warn.putExtra("Sodium", str_sodium);
intent_warn.putExtra("Potassium", str_potassium);
intent_warn.putExtra("Calories", str_calories);
intent_warn.putExtra("Warning", "Contains Dairy");
intent_warn.putExtra("WarningRed", true);
Log.e("Warning",intent_warn.getExtras().getString("Warning"));
context.startActivity(intent_warn);
overridePendingTransition(R.layout.fade_in, R.layout.fade_out); //THIS PART ISN'T WORKING//
}
else
{
Intent intent_menu = new Intent(context, DisplayScreen.class);
intent_menu.putExtra("Name", str_name);
intent_menu.putExtra("Size", str_size);
intent_menu.putExtra("Price", str_price);
intent_menu.putExtra("Carbs", str_carbs);
intent_menu.putExtra("Protein", str_protein);
intent_menu.putExtra("Fiber", str_fiber);
intent_menu.putExtra("Sugar", str_sugar);
intent_menu.putExtra("SatFat", str_satFat);
intent_menu.putExtra("TotFat", str_totFat);
intent_menu.putExtra("Cholesterol", str_cholesterol);
intent_menu.putExtra("Sodium", str_sodium);
intent_menu.putExtra("Potassium", str_potassium);
intent_menu.putExtra("Calories", str_calories);
intent_menu.putExtra("Warning", "Contains no allergens");
intent_menu.putExtra("WarningRed", false);
Log.e("Warning",intent_menu.getExtras().getString("Warning"));
context.startActivity(intent_menu);
}
Log.e("KYLE_DATA_UPCH",str_name+" "+str_price+""+str_size);
}
}
catch (JSONException e)
{
e.printStackTrace();
}
}
else
{
Log.e("ServiceHandler", "Couldn't get any data from the url");
_errorCode=3;
}
return null;
}
@Override
protected void onPostExecute(Void result)
{
...
}
}
Run Code Online (Sandbox Code Playgroud)
Tim*_*Tim 24
所以我实际上能够通过调用overridePendingTransition上下文来解决问题,并将其转换为Activity.
((Activity) context).overridePendingTransition(R.layout.fade_in, R.layout.fade_out);
Run Code Online (Sandbox Code Playgroud)
我意识到这不是最好的做法,并且可能会因为更复杂的应用程序而变得混乱,但就我们的目的而言,我认为这是可以的.我想最终调查@bariscan Kayaoglu的解决方案,因为它似乎更强大.
只是为Tims回答添加一些安全性,在投射之前检查上下文是否是Activity的一个实例:
if (context instanceof Activity) {
((Activity) context).overridePendingTransition(R.layout.fade_in, R.layout.fade_out);
}
Run Code Online (Sandbox Code Playgroud)
这只是确保你调用一个真正存在的方法.你也可以使用try/catch,但我认为这就足够了
| 归档时间: |
|
| 查看次数: |
8100 次 |
| 最近记录: |