2012-02-13 34 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