Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/vim/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 我可以在活动和类中声明并使用相同的按钮吗?_Java_Android_Listview - Fatal编程技术网

Java 我可以在活动和类中声明并使用相同的按钮吗?

Java 我可以在活动和类中声明并使用相同的按钮吗?,java,android,listview,Java,Android,Listview,我想对不同类中的不同调用使用该按钮。但是,当我在Activity类中声明并尝试调用Button click方法时,它会抛出一个null异常。在我的课上,我想这样做: public class CustomFeedListViewAdapter extends BaseAdapter { holder.feedUpVoteButton = (Button) view.findViewById(R.id.feedUpVoteButton); holder.feed

我想对不同类中的不同调用使用该按钮。但是,当我在Activity类中声明并尝试调用Button click方法时,它会抛出一个null异常。在我的课上,我想这样做:

public class CustomFeedListViewAdapter extends BaseAdapter {


       holder.feedUpVoteButton = (Button) view.findViewById(R.id.feedUpVoteButton);

        holder.feedUpVoteButton.setOnClickListener(new View.OnClickListener() {
               @Override
                public void onClick(View v) {

                  //do stuff

                   }
                     });


    private class ViewHolder {

    Button feedUpVoteButton;

}
public class Feed extends AppCompatActivity {

 Button upVoteButton;

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

      upVoteButton = (Button) findViewById(R.id.feedUpVoteButton);

    feedUpVoteButton.setOnClickListener(new View.OnClickListener() {
           @Override
            public void onClick(View v) {

              //do stuff

               }
                 });


  }
 }
在我的主要活动中,我想这样做:

public class CustomFeedListViewAdapter extends BaseAdapter {


       holder.feedUpVoteButton = (Button) view.findViewById(R.id.feedUpVoteButton);

        holder.feedUpVoteButton.setOnClickListener(new View.OnClickListener() {
               @Override
                public void onClick(View v) {

                  //do stuff

                   }
                     });


    private class ViewHolder {

    Button feedUpVoteButton;

}
public class Feed extends AppCompatActivity {

 Button upVoteButton;

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

      upVoteButton = (Button) findViewById(R.id.feedUpVoteButton);

    feedUpVoteButton.setOnClickListener(new View.OnClickListener() {
           @Override
            public void onClick(View v) {

              //do stuff

               }
                 });


  }
 }

您获得NullPointerException是因为您试图访问
feedUpVoteButton
,该按钮出现在
CustomFeedListViewAdapter
中使用的
项目布局中,而不是
Feed
活动使用的布局中

当您创建类型为
CustomFeedListViewAdapter
的适配器时,是否希望访问ClickListener?如果是,那么就这样做

你的活动课堂

public class Feed extends AppCompatActivity {

    CustomFeedListViewAdapter adapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_feed);

        adapter = new CustomFeedListViewAdapter( new OnClickListener() {

            @Override
            public void onClick(View v) {
                // Handle click here
            }

        });

    }
}
以及您的自定义适配器

public class CustomFeedListViewAdapter extends BaseAdapter {

    View.OnClickListener clickListener;

    // Constructor
    public CustomFeedListViewAdapter(View.OnClickListener listener) {
        clickListener = listener;
    }

    @Override
    void getView(){

        holder.feedUpVoteButton = (Button) view.findViewById(R.id.feedUpVoteButton);

        holder.feedUpVoteButton.setOnClickListener(new View.OnClickListener() {
           @Override
            public void onClick(View v) {

              //do stuff

            }
        });
    }

}

通过这种方式,您可以为创建的适配器的每个实例设置不同的侦听器。

您将获得NullPointerException,因为您试图访问
feedUpVoteButton
,该按钮出现在
CustomFeedListViewAdapter
中使用的
项目布局中,而不是
Feed
使用的布局中活动

当您创建类型为
CustomFeedListViewAdapter
的适配器时,是否希望访问ClickListener?如果是,那么就这样做

你的活动课堂

public class Feed extends AppCompatActivity {

    CustomFeedListViewAdapter adapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_feed);

        adapter = new CustomFeedListViewAdapter( new OnClickListener() {

            @Override
            public void onClick(View v) {
                // Handle click here
            }

        });

    }
}
以及您的自定义适配器

public class CustomFeedListViewAdapter extends BaseAdapter {

    View.OnClickListener clickListener;

    // Constructor
    public CustomFeedListViewAdapter(View.OnClickListener listener) {
        clickListener = listener;
    }

    @Override
    void getView(){

        holder.feedUpVoteButton = (Button) view.findViewById(R.id.feedUpVoteButton);

        holder.feedUpVoteButton.setOnClickListener(new View.OnClickListener() {
           @Override
            public void onClick(View v) {

              //do stuff

            }
        });
    }

}

通过这种方式,您可以为创建的适配器的每个实例设置不同的侦听器。

可以。您知道为什么我的
按钮会出现空错误吗?我的MainActivity中的setOnClick
方法?请共享活动提要。是否要从适配器访问feedUpVoteButton到您的活动?@Chirayu YES,完全没有问题。你知道为什么我的
按钮会出现空错误吗?我的主活动中的setOnClick
方法?请共享活动\u提要。你想从适配器访问活动的feedUpVoteButton吗?@Chirayu是的,没错