问题在于:我有一个包含 expandableListView 的活动,我希望在每个组内部显示项目加上按钮,它必须启动另一个允许创建另一个项目并将其添加到列表中的活动。
我已经设法创建了按钮,(为此,当我们到达最后一个孩子(空子)时,一个空子被放在最后一个位置的每个组内部和getChildView中的按钮视图被建造)。 这是代码:
@Override
public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) {
if(isLastChild){
LayoutInflater infalInflater = (LayoutInflater) this._context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = infalInflater.inflate(R.layout.list_btn, null);
Intent i = new Intent(_context,Menu.class);
i.putExtra("WorkoutPosition", groupPosition);
return convertView;
}
...
}
这是按钮的XML代码:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical|center_horizontal">
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="+ New Exercise"
android:id="@+id/newExBtn"
android:layout_gravity="center_vertical|center_horizontal"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true"/>
</RelativeLayout>
工作正常但是当我尝试也设置OnClickListener时会抛出NullPointerException。
以下是代码:
Button newExBtn = (Button) findViewById(R.id.newExBtn);
newExBtn.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v){
...
以下是我得到的例外情况:
Caused by: java.lang.NullPointerException:
Attempt to invoke virtual method 'void android.widget.Button.setOnClickListener(android.view.View$OnClickListener)' on a null object reference
似乎我正在尝试在不存在的按钮上设置监听器,但我无法理解为什么以及由谁来解决这个问题。 谢谢您的帮助!
答案 0 :(得分:0)
我猜您正在调用findViewById()
中的Activity
,甚至可能在将新的充气布局附加到它之前。当findViewById()
以递归方式从Activity
(您使用setContentView()
时使用的布局)的根进行迭代时,在您将其附加到Activity
之前,它将找不到此按钮(即为什么你得到null
。
你的代码应该是:
Button newExBtn = (Button) convertView.findViewById(R.id.newExBtn);
newExBtn.setOnClickListener(new View.OnClickListener(){
...