我可以在Activity和类中声明和使用相同的按钮吗?

时间:2016-11-24 07:12:32

标签: java android listview

我想在不同的类中使用该按钮进行不同的调用。但是,当我声明并尝试在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

               }
                 });


  }
 }

1 个答案:

答案 0 :(得分:0)

您收到NullPointerException,因为您尝试访问feedUpVoteButton item layout中使用的CustomFeedListViewAdapter,而不是Feed活动使用的布局。< / p>

您是否希望在创建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

            }
        });
    }

}

这样,您可以为您创建的适配器的每个实例设置不同的侦听器。