2012-05-25 18 views
6

¿Es posible agregar la barra de progreso a ActionBarSherlock? Necesito mostrarlo y ocultarlo en un momento determinado. Pero tiene que estar ubicado dentro de ActionBarSherlock.Cómo agregar la barra de progreso a ActionBarSherlock

Código de mi clase. puedes ver que utilizo requestWindowFeature (Window.FEATURE_PROGRESS) pero no hace ninguna diferencia. El mismo resultado. :

public class RecipeActivity extends SherlockActivity { 

private String picture; 
private String TAG = "RecipeActivity"; 
private ImageView viewPicture; 
private RecipeGeneral recipeGeneral; 
private Recipe recipe; 
private String [] pictures; 
private ArrayList<Step> steps; 
//private ImageView viewStar; 
private DataBaseFactory db; 
private NyamApplication application; 
private TextView viewDescription; 
private TextView userView; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    requestWindowFeature(Window.FEATURE_PROGRESS); 
    setProgressBarIndeterminateVisibility(true); 

    try { 
     setContentView(R.layout.recipe_page); 

     getSupportActionBar().setDisplayShowTitleEnabled(false); 
     recipeGeneral = (RecipeGeneral)getIntent().getSerializableExtra("Recipe"); 
     Log.d(TAG, "recipeGeneral = " + recipeGeneral.toString()); 
     picture = Constants.URL + recipeGeneral.getImg_url(); 
     Log.d(TAG,"picture : " + picture); 
     viewPicture = (ImageView)findViewById(R.id.picture); 
     new DownloadImageTask().execute(pictures); 

     viewDescription = (TextView)findViewById(R.id.recepy_description); 
     TextView viewTitle = (TextView)findViewById(R.id.recepy_title); 
     TextView ratingView = (TextView)findViewById(R.id.txtTitle3); 
     userView = (TextView)findViewById(R.id.author_name); 

     application = (NyamApplication)getApplication(); 
     db = application.getDB(); 

     if (getIntent().getBooleanExtra("isFavorites", false) == true) { 
      Log.d(TAG, "isFavorites = " + getIntent().getBooleanExtra("isFavorites", false)); 

      viewDescription.setText(((Recipe)recipeGeneral).getDescription()); 
      viewTitle.setText(recipeGeneral.getTitle()); 
      Log.d(TAG, "Title = " + recipeGeneral.getTitle()); 
      ratingView.setText(String.valueOf(recipeGeneral.getFavorites_by())); 
      Log.d(TAG, "Rating = " + String.valueOf(recipeGeneral.getFavorites_by())); 
      userView.setText(((Recipe)recipeGeneral).getUser()); 
      Log.d(TAG, "User = " + ((Recipe)recipeGeneral).getUser()); 


      steps = db.getStepsByRecipeId(recipeGeneral.getId()); 
      if (steps != null) { 
       ((Recipe)recipeGeneral).setSteps(steps); 
      } 

     } else { 
      Log.d(TAG, "isFavorites = " + getIntent().getBooleanExtra("isFavorites", false)); 
      Object [] params = new Object[] {this, Constants.URL + recipeGeneral.getPath()+ Constants.JSON}; 

      new AsyncHttpGetRecipe().execute(params); 
      new AsyncHttpGetSteps().execute(params);  
      viewTitle.setText(recipeGeneral.getTitle()); 

      ratingView.setText(recipeGeneral.getFavorites_by()); 
      Log.d(TAG, "Rating = " + recipeGeneral.getFavorites_by()); 

     } 

    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
} 


private class DownloadImageTask extends AsyncTask<String,Void,Bitmap> { 

    Bitmap bitmap = null; 

    @Override 
    protected Bitmap doInBackground(String... str) { 
     try{ 
      InputStream in = new java.net.URL(picture).openStream(); 
      bitmap = BitmapFactory.decodeStream(new SanInputStream(in)); 
      //viewPicture.setImageBitmap(bitmap); 
     } 
     catch(Exception e){ 
      e.printStackTrace(); 
     } 
     return bitmap; 
    } 

    @Override 
    protected void onPostExecute(Bitmap result) { 
     super.onPostExecute(result); 
     viewPicture.setBackgroundDrawable(new BitmapDrawable(bitmap)); 
    } 
} 


@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    com.actionbarsherlock.view.MenuInflater inflater = getSupportMenuInflater(); 
    inflater.inflate(R.menu.item_page_menu, (com.actionbarsherlock.view.Menu) menu); 
    return super.onCreateOptionsMenu(menu); 
} 

public void onClick(View v) { 
    switch(v.getId()) { 
    case R.id.icon_little3: 
     Log.d(TAG,"further"); 
     if (getIntent().getBooleanExtra("isFavorites", false) == false) { 
      if (recipe != null && steps != null) { 
       recipe.setSteps(steps); 
       db.addRecipeToFavorites(recipe); 
      } 
     } 
    } 
} 


@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    switch(item.getItemId()) { 
    case R.id.menu_further: 
     Log.d(TAG,"In menu_further"); 
     Intent stepIntent = new Intent(this, StepActivity1.class); 

     if (getIntent().getBooleanExtra("isFavorites", false) == true) { 
      Log.d(TAG,"id: " + recipeGeneral.getId()); 
      Log.d(TAG,"desc: " + recipeGeneral.getTitle()); 
      stepIntent.putExtra("Recipe1", recipeGeneral); 
     } else { 
      Log.d(TAG,"id: " + recipe.getId()); 
      Log.d(TAG,"desc: " + recipe.getTitle()); 
      recipe.setSteps(steps); 
      stepIntent.putExtra("Recipe1", recipe); 
     } 
     startActivity(stepIntent); 
     return true; 
    case R.id.menu_cart: 
     Toast.makeText(this, "Cart", 10000).show(); 
     return true; 
    default: 
     return super.onOptionsItemSelected(item); 
    } 

} 


class AsyncHttpGetRecipe extends AsyncTask<Object, String, Recipe> { 

    @Override 
    protected Recipe doInBackground(Object... params) { 
     Recipe recipeAsync = null; 
     try { 
      recipeAsync = ApiFactory.getRecipe((Context)params[0], (String)params[1]); 
     } catch (JSONException e) { 
      e.printStackTrace(); 
     } 
     recipe = recipeAsync; 
     return recipeAsync; 
    } 

    @Override 
    protected void onPostExecute(Recipe recipeTemp) { 
     viewDescription.setText(recipeTemp.getDescription()); 
     Log.d(TAG, "Description = " + recipeTemp.getDescription()); 
     userView.setText(recipeTemp.getUser()); 
     Log.d(TAG, "User = " + recipeTemp.getUser()); 

    } 
} 

class AsyncHttpGetSteps extends AsyncTask<Object, String, ArrayList<Step>> { 

    @Override 
    protected ArrayList<Step> doInBackground(Object... params) { 
     ArrayList<Step> stepsAsync = null; 
     try { 
      stepsAsync = ApiFactory.getSteps((Context)params[0], (String)params[1]); 
     } catch (JSONException e) { 
      e.printStackTrace(); 
     } catch (ParseException e) { 
      e.printStackTrace(); 
     } 
     return stepsAsync; 
    } 

    @Override 
    protected void onPostExecute(ArrayList<Step> stepsAsync) { 
     steps = stepsAsync; 
    } 
} 

}

Respuesta

5

Sí, puede, ABS tiene esa característica. fragmento de código siguiente es de aplicación Demos muestra de ABS:

public class Progress extends SherlockActivity { 
    Handler mHandler = new Handler(); 
    Runnable mProgressRunner = new Runnable() { 
     @Override 
     public void run() { 
      mProgress += 2; 

      //Normalize our progress along the progress bar's scale 
      int progress = (Window.PROGRESS_END - Window.PROGRESS_START)/100 * mProgress; 
      setSupportProgress(progress); 

      if (mProgress < 100) { 
       mHandler.postDelayed(mProgressRunner, 50); 
      } 
     } 
    }; 

    private int mProgress = 100; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     setTheme(SampleList.THEME); //Used for theme switching in samples 
     super.onCreate(savedInstanceState); 

     //This has to be called before setContentView and you must use the 
     //class in com.actionbarsherlock.view and NOT android.view 
     requestWindowFeature(Window.FEATURE_PROGRESS); 

     setContentView(R.layout.progress); 

     findViewById(R.id.go).setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View arg0) { 
       if (mProgress == 100) { 
        mProgress = 0; 
        mProgressRunner.run(); 
       } 
      } 
     }); 
    } 
} 

esta muestra se pueden encontrar en muestras \ demos \ del ABS (Progress.java en espacio de trabajo de Eclipse)

+0

Por favor, mira a un lado y dime lo que estoy haciendo mal. – Stas

+3

prueba setSupportProgressBarIndeterminateVisibility (true); en cambio setProgressBarIndeterminateVisibility (true); y requestWindowFeature (Window.FEATURE_INDETERMINATE_PROGRESS); en cambio requestWindowFeature (Window.FEATURE_PROGRESS); – Style

+1

si quieres IndeterminateProgress – Style

16

Sí. Puede agregar una ProgressBar a una barra de acciones usando ABS.

Este es un extracto de la fuente proporciona a continuación, si las soluciones que ayudan, 1 el cartel original ;-)

En el método de onCreate(), añadir esta pieza de código:

requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS); 
setProgressBarIndeterminateVisibility(true); 

Y cuando haya terminado con la tarea que se necesita mostrar ProgressBar para, ocultar el ProgressBar utilizando este código:

setProgressBarIndeterminateVisibility(false); 

Crédito: https://stackoverflow.com/a/9157874/450534

+0

Se doesn 't muestran progressbar o cualquier animación adicional. Estas dos líneas solo desactivan mi barra de acciones del trabajo. Ahora arroja una excepción después de presionar cualquier botón de la barra de acciones. No importa, solo necesito la barra de progreso. ¿Qué estoy haciendo mal? – Stas

+0

@Stas: publique algo del código que está usando. –

+0

Usted está llamando a Window.FEATURE_PROGRESS –

3

Para compatibilidad completa se debe utilizar :

setSupportProgressBarIndeterminateVisibility(true); 

Aquí se muestra un ejemplo:

public class MyActivity extends SherlockFragmentActivity { 
    //... 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState);  
     requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS);   
     setContentView(R.layout.my_layout); 
     //... 
     setSupportProgressBarIndeterminateVisibility(true); 
    } 
} 
Cuestiones relacionadas