Исключение NullPointerException при добавлении кнопки onClickListener в ListView

63
5

Мне было интересно, может ли кто-нибудь помочь мне. У меня в основном есть listview в моем приложении, которое извлекает данные из lastFM. Сама строка ссылается на страницу трека исполнителя, а кнопка ссылается на страницу художников. Я продолжаю получать исключение NullPointer когда добавляю artistButton.setOnClickListener(this). Может кто-то мне помочь, это буквально последняя часть функциональности, которую мне нужно реализовать, и я в тупике.

Спасибо заранее всем, кто может помочь :)

public class TrackDataAdapter extends BaseAdapter implements OnClickListener  {

private static final String debugTag = "TrackDataAdapter";

private Activity activity;
private ArrayList<TrackData> data;
private static LayoutInflater inflater=null;
public ImageLoader imageLoader;

public TrackDataAdapter (TrackActivity a, ArrayList<TrackData> d)
{
activity = a;
data = d;
inflater = (LayoutInflater)activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
imageLoader = new ImageLoader(activity.getApplicationContext());
}

public int getCount() {
return data.size();
}

public Object getItem(int position) {
return position;
}

public long getItemId(int position) {
return position;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
View vi=convertView;
if(convertView==null)
vi = inflater.inflate(R.layout.trackrow, null);

TextView artistName=(TextView)vi.findViewById(R.id.artist_name);
ImageView image=(ImageView)vi.findViewById(R.id.album_icon);
TextView trackName=(TextView)vi.findViewById(R.id.track_name);
Button artistButton = (Button)vi.findViewById(R.id.track_button);
artistName.setText(data.get(position).getArtist());
trackName.setText(data.get(position).getName());
imageLoader.DisplayImage(data.get(position).getImageUrl(), image);
vi.setId(position);
vi.setOnClickListener(this);
artistButton.setOnClickListener(this);

return vi;
}

@Override
public void onClick(View v) {
Log.d("OnClick", "button clicked");
if (v instanceof Button) {
Log.d("OnClick" , "Instance of button type");
Intent intent = new Intent(android.content.Intent.ACTION_VIEW,
Uri.parse(data.get(v.getId()).getArtistUrl()));
this.activity.startActivity(intent);
}
else if (v instanceof View) {
Log.d("OnClick" , "Instance of button type");
Intent intent = new Intent(android.content.Intent.ACTION_VIEW,
Uri.parse(data.get(v.getId()).getTrackUrl()));
this.activity.startActivity(intent);
}
}
}

Это мой trackrow.xml

    <?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/background"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@drawable/rowselector"
android:orientation="horizontal" >

<RelativeLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:paddingLeft="4dp" >

<ImageView
android:id="@+id/album_icon"
android:layout_width="32dip"
android:layout_height="32dip"
android:layout_alignParentLeft="true"
android:layout_centerVertical="true"
android:scaleType="fitXY"
android:src="@drawable/blank" >
</ImageView>

<TextView
android:id="@+id/track_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="4dip"
android:layout_toRightOf="@+id/album_icon"
android:shadowColor="@color/black"
android:shadowDx="0"
android:shadowDy="0"
android:shadowRadius="0.5"
android:textColor="#777777"
android:textStyle="bold" >
</TextView>

<TextView
android:id="@+id/artist_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/track_name"
android:layout_marginLeft="4dip"
android:layout_toRightOf="@+id/album_icon"
android:text="Best Badger: " >
</TextView>

<Button
android:id="@+id/track_button"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:layout_alignParentRight="true"
android:layout_centerVertical="true"
android:text="Artist" >
</Button>

</RelativeLayout>
</RelativeLayout>

спросил(а) 2021-01-25T18:03:38+03:00 6 месяцев назад
1
Решение
101

Линия, на которую нужно обратить внимание, такова:

Button artistButton = (Button)vi.findViewById(R.id.track_button);

Похоже, что artistButton имеет значение null после этой строки. Является ли представление, которое вы пытаетесь получить (R.id.track_button)?

ответил(а) 2021-01-25T18:03:38+03:00 6 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема