2012-02-13 32 views
0

我希望創建一個ListView,其中列表中的每個項目都應該包含一個textview和一個旁邊的imageview。點擊textView應該帶我到另一個活動,點擊imageview/imagebutton應該播放一個音頻文件。在ListView中的TextView和ImageButton上的單獨監聽器

這是迄今爲止我寫的代碼的相關部分:

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    mDbHelper = new DbAdapter(this); 
    mDbHelper.open(); 

    temp=mDbHelper.fetchAllNotes(); 
    startManagingCursor(temp); 
    String[] from=new String[]{DbAdapter.KEY_TITLE};           

    int[] to= new int[]{R.id.tvList}; 
    words = new SimpleCursorAdapter(Main.this, R.layout.emptylist, temp, from, to); 
    Main.this.setListAdapter(words); 

    ImageView ivSpeak=(ImageView) findViewById(R.id.ivSpeak); 
    ivSpeak.setOnClickListener(new OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       Toast.makeText(Main.this, "Hi", Toast.LENGTH_SHORT).show(); 
      } 
    });} 

protected void onListItemClick(ListView l, View v, int position, long id) { 
    super.onListItemClick(l, v, position, id); 
    Intent i=new Intent(Main.this,WordDetail.class); 
    i.putExtra(DbAdapter.KEY_ROWID, id); 
    startActivity(i); 
} 

main.xml中(佈局爲整個活動的)文件是:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" android:layout_width="fill_parent" 
    android:layout_height="wrap_content" android:background="@drawable/changedback"> 
    <ListView android:id="@android:id/list" android:layout_width="fill_parent" 
     android:layout_height="0dp" android:layout_weight="1" 
     android:textFilterEnabled="true" 
     android:background="@android:color/transparent" 
     android:cacheColorHint="#00000000"> 
    </ListView> </LinearLayout> 

的emptylist.xml (listview中單個項目的佈局)文件是:

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="?android:attr/listPreferredItemHeight" android:background="@android:color/transparent"> 
    <TextView android:id="@+id/tvList" android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:singleLine="true" 
     android:ellipsize="marquee" 
     android:layout_alignParentLeft="true" 
     android:textAppearance="?android:attr/textAppearanceLarge" 
     android:layout_centerVertical="true" 
     android:background="@android:color/transparent"/> 
    <ImageView 
     android:id="@+id/ivSpeak" 
     android:layout_width="wrap_content" 
     android:layout_height="fill_parent" 
     android:src="@drawable/ic_launcher" 
     android:layout_alignParentRight="true" 
     android:focusable="false" 
     android:background="@android:color/transparent"/> 
    </RelativeLayout> 

ivSpeak.setOnClickListener(new On ClickListener()給我一個空指針異常。請幫助。我對Android非常陌生

回答

0

最終,我想出了自己。我必須編寫一個擴展simplecursoradapter的自定義適配器,並在最初的代碼中使用它來代替簡單的適配器。之後,它開始工作,但不知道具體原因是什麼。如果有人能解釋它,那將是非常好的。

這是新的自定義適配器

class MySimpleCursorAdapter extends SimpleCursorAdapter{ 

     MySimpleCursorAdapter(Context context, int layout, Cursor cursor, String[] from, int[] to){ 
      super(context, layout, cursor, from, to); 
     } 

     public View getView(int position, View convertView,ViewGroup parent) { 
      View row=super.getView(position, convertView, parent); 

      ImageView ivSpeak=(ImageView) row.findViewById(R.id.ivSpeak); 
      ivSpeak.setOnClickListener(new OnClickListener() { 

       @Override 
       public void onClick(View v) { 
        Toast.makeText(Main.this, "Hi", Toast.LENGTH_SHORT).show(); 
        mp=MediaPlayer.create(Main.this, R.raw.correct); 
        mp.start(); 
       } 
      }); 

      return row; 
     } 
    } 
0

所有視圖都具有ClickListener綁定功能setOnClickListener()。我假設你可以做如下的事情:

ImageView img = new ImageView(context); 
img.setOnClickListener(new OnClickListener() { 
    public void onClick() { 
     // Your action 
    } 
} 
+0

fayerth喜代碼..感謝您的回覆,但是這是行不通的。我編輯了這個問題。如果可能,請看看並幫助我。 – ambit 2012-02-14 11:42:08