我想在不同的类中使用该按钮进行不同的调用。但是,当我声明并尝试在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
}
});
}
}
答案 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
}
});
}
}
这样,您可以为您创建的适配器的每个实例设置不同的侦听器。