如何从另一个类设置Android工具栏的标题?

时间:2016-12-21 06:32:32

标签: java android android-toolbar

我想做这样的事情:

if (total != 0) {
    percentage = String.valueOf((count * 100) / total);
    Log.e("Percentage", percentage);
    myActivity.getSupportActionBar().setTitle("Progress: " + percentage + "%.");
}

但是,我无法致电getSupportActionBar(),因为它显示Non-static method 'getSupportActionBar()' cannot be referenced from a static context。我怎么解决这个问题?

更新

这是我公共类中的方法,我想调用上面的代码;

     @Override
public void onBindViewHolder(final ViewHolder holder, int position) {
    holder.checkbox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
         @Override
         public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {

         }
         });
         }

4 个答案:

答案 0 :(得分:0)

投放您的活动可以解决您的问题。假设您的活动名称是YourCustomActivity。现在像下面一样施放Activity。希望它能奏效。

    YourCustomActivity activity=(YourCustomActivity)myActivity;
    activity.getSupportActionBar().setTitle("");

如果有效,请告诉我。

答案 1 :(得分:0)

您可以将activity参数传递给另一个类,并使用下面的活动功能;

public class CityModel {

    Activity activity;

    public CityModel(Activity activity) {
        this.activity = activity;
    }

    private void doIt() {
        ((YourActivity) activity).changeTitle("New Title");
    }

}

并定义此类实例,如下所示;

 public class YourActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        CityModel model = new CityModel(this); // this-> Your activity.
     }

     public void changeTitle(String newTitle){
       getSupportActionBar().setTitle(newTitle);
     }
}

希望它有所帮助。

答案 2 :(得分:0)

感谢其他答案,但它们都不符合我的要求。

我通过将代码移动到相关活动并从那里设置标题来解决它。但是,主要的变化是从侦听器方法发布百分比值,在我的情况下: onItemCheckBoxChecked 。这意味着每次用户选中一个框(在文本视图或其他情况下可能是其他侦听器),百分比就会实时计算。我还将百分比变量公之于众。

答案 3 :(得分:-1)

因为getSupportActionBar()不是静态方法。如果您在静态类或静态方法中使用此方法,则会出现以下错误。

  

无法从静态上下文引用非静态方法getSupportActionBar()

如果您想要使用常用方法,可以考虑在您的活动中创建公共方法并使用fragments进行调用。

public void setToolBar(String title) {
        getSupportActionBar().setTitle(title);
}

如果您有活动,只需拨打以下代码即可。

getSupportActionBar().setTitle(title);

编辑我的代码:

public static void setToolbar(final AppCompatActivity activity,String title){
    activity.getSupportActionBar().setTitle(title);
}

编辑代码: 我的RecyclerViewAdapter类:

public class ExploreGalleryAdapter extends RecyclerView.Adapter<ExploreGalleryAdapter.ViewHolder> {

    private AppCompatActivity activity;
    private ArrayList<ExploreGalleryModel> exploreGalleryModelArrayList;
    //    private String status;


    public ExploreGalleryAdapter(AppCompatActivity activity, final ArrayList<ExploreGalleryModel> exploreGalleryModelArrayList, final String status) {
        this.activity = activity;
        this.exploreGalleryModelArrayList = exploreGalleryModelArrayList;
//        this.status = status;
    }

  public void onBindViewHolder(final ViewHolder holder, int position) {
holder.checkbox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
                @Override
                public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {

activity.getSupportActionBar().setTitle(title);

     }
            });

}