Java 我可以在活动和类中声明并使用相同的按钮吗?
我想对不同类中的不同调用使用该按钮。但是,当我在Activity类中声明并尝试调用Button click方法时,它会抛出一个null异常。在我的课上,我想这样做: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
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是的,没错