2013-03-01 47 views
1

我想知道是否有人可以幫助我。我基本上在我的應用程序中有一個listview,它從lastFM中提取數據。該行本身鏈接到藝術家軌道頁面,並鏈接到藝術家頁面。當我添加 artistButton.setOnClickListener(this)時,我不斷收到NullPointer例外情況。有人可以幫助我,這實際上是我需要實現的最後一項功能,我很難過。NullPointerException當在ListView中添加onClickListener到按鈕

在此先感謝大家誰可以幫助:)

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> 
+2

你能告訴我們你的佈局文件嗎? – SirPentor 2013-03-01 23:56:17

+0

'track_button'是你的'trackrow' xml文件中的'Button'嗎? – codeMagic 2013-03-01 23:58:10

+0

['NullPointerException'](http://developer.android.com/reference/java/lang/NullPointerException.html) – 2013-03-02 00:18:39

回答

0

看該生產線是這樣的:

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

它看起來像artistButton在這行之後爲null。您試圖獲得有效的視圖(R.id.track_button)?

+0

感謝您的回覆,我在原始帖子中包含了trackrow.xml,視圖絕對是track_button。我真的很困惑,爲什麼它顯示爲空。可能是與listview相關的東西嗎? – 2013-03-02 10:50:35

相關問題