简体   繁体   English

如何从另一个类(使用 ViewHolder)调用 MainActivity 中的方法?

[英]How to call a method in MainActivity from another class ( with ViewHolder)?

I have an activity.我有一个活动。 I have to run a method in the other class in this activity.我必须在此活动的另一个类中运行一个方法。 I'm using ViewHolder in the other class.我在另一个类中使用 ViewHolder 。 I am told that I need to add a "super ()" method when I call the class directly.有人告诉我,当我直接调用类时,我需要添加一个“super()”方法。 But I can't do this.但我不能这样做。 Because I've already added.因为我已经加了。 Although I call the method differently, I am told that I need to set the method as static.尽管我对该方法的调用方式不同,但我被告知需要将该方法设置为静态。 But in this way, Textview and buttons do not work in this class.但是这样,Textview 和按钮在这个类中不起作用。 I don't know what to do and I couldn't find a solution.我不知道该怎么做,也找不到解决方案。 I would be glad if you could help.如果你能帮忙,我会很高兴。

My Activity;我的活动;

public class MainActivity extends AppCompatActivity implements RewardedVideoAdListener {

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        //First Step - DOES NOT WORK !!!!
        MyClass myClass = new MyClass();
        myClass.myMethod();
        //Doesn't work. Because i want to add super() method to MyClass. But i was added earlier. I can't use again.


        //Secondly Step - DOES NOT WORK !!!!
        MyClass .myMethod();
        //Doesn't work. Because i want to add public void static to method. If i add static my method, i can't use buttons or textviews.
     }
}

MyClass;我的课;

public class MyClass extends RecyclerView.ViewHolder {

    //Example
    public TextView mytextview;
    private boolean myboolean = false;

    public MyClass (View itemView) {
        super(itemView);

        mytextview= (TextView)itemView.findViewById(R.id.mytextview);
    }

    public void myMethod(){

    myboolean = false;

    if (!myboolean){

     myboolean = true;
     mytextview.setVisibility(View.VISIBLE);
    } 

    else {

     myboolean = false;
     mytextview.setVisibility(View.INVISIBLE);
    }

    }

  //If i static method, doesn't work other view. example:textview.setvisibility or myboolean=true etc.... I can't use private static Textview or others...
  public static void myMethod(){

        myboolean = false;

     if (!myboolean){

     myboolean = true;
     mytextview.setVisibility(View.VISIBLE);
    } 

    else {

     myboolean = false;
     mytextview.setVisibility(View.INVISIBLE);
       }
    }
}

Do this in your MainActity.在您的 MainActity 中执行此操作。

public class MainActivity extends AppCompatActivity implements RewardedVideoAdListener 
 {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

 TextView yourActivityMainTextView=findViewById(R.id.your_txt_view_id) //from activity 
  main xml

    MyClass myClass = new MyClass(yourActivityMainTextView);
    myClass.myMethod();


 }
}

Here, I am feeling that you are using Recylerview's ViewHolder in different way which is not recommended.在这里,我感觉您以不同的方式使用 Recylerview 的 ViewHolder,这是不推荐的。 My thoughts are, you are using RecylerView.ViewHolder to show the list with the use of RecyclerView.我的想法是,您正在使用 RecylerView.ViewHolder 来显示使用 RecyclerView 的列表。

If yes, then you should use a class that extends RecyclerView.Adapter and create a class for ViewHolder.如果是,那么您应该使用一个扩展 RecyclerView.Adapter 的类并为 ViewHolder 创建一个类。 You can pass your method inside Adapter which will be very easy for you to access through your Activity.您可以在 Adapter 中传递您的方法,这将很容易让您通过您的活动访问。

public class AnyAdapter extends RecyclerView.Adapter<YourObjectType> {
     public TextView mytextview;
     private boolean myboolean = false;

     public MyClass (View itemView) {
        super(itemView);
        mytextview= (TextView)itemView.findViewById(R.id.mytextview);
     } 

    static class ViewHolder {
        ImageView downloadImageButton;
        TextView catlogTitle;
        ImageView icon;
        int position;
    }

    public View getView(final int position, View convertView, ViewGroup parent) {
        ...
    } // close getView
}

Create object of Adapter in Activity like this:在 Activity 中创建 Adapter 对象,如下所示:

AnyAdapter adapter = new AnyAdapter();

You can able to access your method like this.您可以像这样访问您的方法。 Hope it will work for you.希望它对你有用。

Happy Coding..!快乐编码...!

You just need to add adapter in your project.你只需要在你的项目中添加适配器。 Below link will help you https://abhiandroid.com/ui/adapter以下链接将为您提供帮助https://abhiandroid.com/ui/adapter

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM