2016-11-13 3 views
-1

Так что я делаю это приложение, где у меня будет список предметов, содержащих текст и кнопку, кроме него.Android ListView с кнопкой

Я получаю эту ошибку в моем классе Пользовательского адаптера:

java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.Button.setOnClickListener(android.view.View$OnClickListener)' on a null object reference 

Весь класс пользовательского адаптер следующим образом:

package com.android.ict.seneca.androidpocketguide; 

import android.app.Activity; 
import android.content.Context; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.ArrayAdapter; 
import android.widget.Button; 
import android.widget.ImageView; 
import android.widget.TextView; 
import android.widget.Toast; 

import java.util.List; 


public class CustomListAdapter extends ArrayAdapter<RowItem> { 

    private Context context; 

    public CustomListAdapter(Context context, 
          int resourceId, 
          List<RowItem> items) { 

     super(context, resourceId, items); 
     this.context = context; 
    } 

    private class ViewHolder { 
     TextView txtName; 
     TextView txtDate; 
     TextView txtLocation; 
     Button button; 

    } 
    public View getView(int position, View convertView, ViewGroup parent) { 

     ViewHolder holder = null; 

     RowItem rowItem = getItem(position); 

     LayoutInflater mInflater = 
       (LayoutInflater) context.getSystemService(
         Activity.LAYOUT_INFLATER_SERVICE); 

     if (convertView == null) { 

      convertView = mInflater.inflate(R.layout.list_item, null); 

      holder = new ViewHolder(); 

      holder.txtName = (TextView) convertView.findViewById(R.id.nam); 
      holder.txtDate = (TextView) convertView.findViewById(R.id.dat); 
      holder.txtLocation = (TextView) convertView.findViewById(R.id.loc); 
      holder.button = (Button)convertView.findViewById(R.id.deleteBtn); 
      convertView.setTag(holder); 
     } 
     else 
      holder = (ViewHolder) convertView.getTag(); 

     holder.txtName.setText(rowItem.getNameId()); 
     holder.txtDate.setText(rowItem.getLocation()); 
     holder.txtLocation.setText(rowItem.getDate()); 

     holder.button.setOnClickListener(new View.OnClickListener() 
     { 
      @Override 
      public void onClick(View v) 
      { 
       Toast.makeText(context, "Delete button pressed: ",Toast.LENGTH_LONG).show(); 
       // Your code that you want to execute on this button click 
      } 

     }); 

     return convertView; 
    } 

} 

У меня 2 раскладки, 1 для ListView itelf, а затем другой - для кнопок.

The ListView элементов выглядит следующим образом (activity_websites):

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:orientation="vertical" > 

    <ListView 
     android:id="@+id/locationList" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content"/> 

</RelativeLayout> 

Кнопка XMLFILE выглядит следующим образом (delete.xml):

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

    <Button 
     android:id="@+id/deleteBtn" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:textColor="#FFFFFFFF" 
     android:text="Delete" 
     android:onClick="onClickDelete"/> 

</LinearLayout> 

Также у меня есть ощущение, что я делаю прямо теперь вообще неправильно, чтобы получить представление, которое я хочу для своего приложения. Могу ли я помочь им?

ответ

0

Макет, который вы пытаетесь надуть, - list_item.xml. С вашего вопроса я понимаю, что кнопка находится в delete.xml. So convertView.findViewById(R.id.deleteBtn); возвращение null.

Вам необходимо поставить Button в list_item.xml.

Также удалите android:onClick="onClickDelete" в xml. У вас уже есть адаптер onClick.

Смежные вопросы