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

Java 如何从另一个类设置Android工具栏的标题?,java,android,android-toolbar,Java,Android,Android Toolbar,我想这样做: if (total != 0) { percentage = String.valueOf((count * 100) / total); Log.e("Percentage", percentage); myActivity.getSupportActionBar().setTitle("Progress: " + percentage + "%."); } 但是,我不能调用getSupportActionBar(),因为它说非静态方法“getSuppo

我想这样做:

if (total != 0) {
    percentage = String.valueOf((count * 100) / total);
    Log.e("Percentage", percentage);
    myActivity.getSupportActionBar().setTitle("Progress: " + percentage + "%.");
}
但是,我不能调用
getSupportActionBar()
,因为它说
非静态方法“getSupportActionBar()”不能从静态上下文中引用。我怎样才能解决这个问题

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

if (total != 0) {
    percentage = String.valueOf((count * 100) / total);
    Log.e("Percentage", percentage);
    myActivity.getSupportActionBar().setTitle("Progress: " + percentage + "%.");
}
这是我的公共类中的方法,我想在其中调用上述代码

if (total != 0) {
    percentage = String.valueOf((count * 100) / total);
    Log.e("Percentage", percentage);
    myActivity.getSupportActionBar().setTitle("Progress: " + percentage + "%.");
}
     @Override
public void onBindViewHolder(final ViewHolder holder, int position) {
    holder.checkbox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
         @Override
         public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {

         }
         });
         }

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

if (total != 0) {
    percentage = String.valueOf((count * 100) / total);
    Log.e("Percentage", percentage);
    myActivity.getSupportActionBar().setTitle("Progress: " + percentage + "%.");
}
无法从静态上下文引用非静态方法
getSupportActionBar()

if (total != 0) {
    percentage = String.valueOf((count * 100) / total);
    Log.e("Percentage", percentage);
    myActivity.getSupportActionBar().setTitle("Progress: " + percentage + "%.");
}
如果你想为它创建一个公共方法,你可以在你的活动中创建一个公共方法,并调用你的
片段

if (total != 0) {
    percentage = String.valueOf((count * 100) / total);
    Log.e("Percentage", percentage);
    myActivity.getSupportActionBar().setTitle("Progress: " + percentage + "%.");
}
public void setToolBar(String title) {
        getSupportActionBar().setTitle(title);
}
如果您有活动,只需调用下面的代码即可

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

if (total != 0) {
    percentage = String.valueOf((count * 100) / total);
    Log.e("Percentage", percentage);
    myActivity.getSupportActionBar().setTitle("Progress: " + percentage + "%.");
}
public static void setToolbar(final AppCompatActivity activity,String title){
    activity.getSupportActionBar().setTitle(title);
}
编辑代码: 我的RecycleServiceAdapter类:

if (total != 0) {
    percentage = String.valueOf((count * 100) / total);
    Log.e("Percentage", percentage);
    myActivity.getSupportActionBar().setTitle("Progress: " + percentage + "%.");
}
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);

     }
            });

}
公共类ExploreGalleryAdapter扩展了RecyclerView.Adapter{
私人活动;
私有ArrayList exploreGalleryModelArrayList;
//私有字符串状态;
公共ExploreGalleryAdapter(AppCompatActivity活动,最终ArrayList exploreGalleryModelArrayList,最终字符串状态){
这个。活动=活动;
this.exploreGalleryModelArrayList=exploreGalleryModelArrayList;
//这个状态=状态;
}
公共无效onBindViewHolder(最终ViewHolder,内部位置){
setOnCheckedChangeListener(newcompoundButton.OnCheckedChangeListener()){
@凌驾
检查更改后的公共无效(复合按钮视图,布尔值已检查){
activity.getSupportActionBar().setTitle(标题);
}
});
}

强制执行活动可以解决您的问题。假设您的活动名称为YourCustomActivity。现在按如下方式强制执行活动。希望它能起作用

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

请告诉我它是否有效。

您可以将活动参数传递给另一个类,并使用如下活动函数

if (total != 0) {
    percentage = String.valueOf((count * 100) / total);
    Log.e("Percentage", percentage);
    myActivity.getSupportActionBar().setTitle("Progress: " + percentage + "%.");
}
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);
     }
}
并定义这个类实例,如下所示

if (total != 0) {
    percentage = String.valueOf((count * 100) / total);
    Log.e("Percentage", percentage);
    myActivity.getSupportActionBar().setTitle("Progress: " + percentage + "%.");
}
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);
     }
}

希望有帮助。

感谢其他答案,但没有一个符合我的要求

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

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

为什么不创建自定义侦听器来从另一个类设置活动中的标题,而不是使用活动实例调用它。您的代码块似乎位于静态方法中。是否调用myActivity.getSupportActionBar().setTitle(“进度:”+百分比+“%”);这是fragment类中的一行?@ρцσρѕρєK-如何做?我不知道如何解决这个问题,这就是为什么我问这个问题。@sohan shetty不是一个片段,而是来自另一个Java类。我有它的上下文,但仍然不知道如何从那里更改标题。这并不能解决问题。我无法从另一个publ访问活动的工具栏ic类-如何解决这个问题?你能发布你的公共类代码吗,我可以检查一下。这是一个非常大的类,我不能在这里发布全部内容,因为其他原因。但是,我在选中复选框时调用了有问题的代码。所以,我希望百分比是实时的…现在检查我编辑的问题。我刚刚看到了你的更新答案,如何调用它?当我像setToolbar(myActivity,percentage)那样调用它时,它会抛出一个错误;-错误是“Expression expected”。ClassName.setToolbar(myActivity,percentage);这样,您可以调用它。对不起,在这种情况下,“myActivity”是什么?您提到我的活动名称是YourCustomActivity(在我的例子中是myActivity)…请帮助我理解。您在问题myActivity.getSupportActionBar().setTitle(“进度:“+percentage+”%。”);您的问题中的myActivity是什么?
if (total != 0) {
    percentage = String.valueOf((count * 100) / total);
    Log.e("Percentage", percentage);
    myActivity.getSupportActionBar().setTitle("Progress: " + percentage + "%.");
}