2014-04-06 131 views
0

我在Android中使用SimpleAdapter生成了Listview。我在Xml文件中放置了幾個TextViewsButton,以便這些小部件顯示在ListView的行上。我想讓按鈕在ListView中可點擊。我不想使用任何BaseAdapterCustomAdapterArrayadapter。任何人都可以告訴我如何處理簡單適配器?如何在Android中使用SimpleAdapter生成的ListView中生成可點擊按鈕?

我的代碼如下:

 final ListView l=(ListView)findViewById(R.id.listView1); 
    ListAdapter k=new SimpleAdapter(this,val1,R.layout.mytask,new String[]{"TaskId","heading","status"},new int[]{R.id.View1,R.id.View2,R.id.ViewStatus}); 
    Button b=(Button)findViewById(R.id.mytask); 
    l.setAdapter(k); 

我的XML文件如下:

<?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" 

> 

<TextView 
    android:id="@+id/textView1" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignParentLeft="true" 
    android:layout_alignParentTop="true" 
    android:layout_marginTop="18dp" 
    android:text="Task Name:" 

    android:textSize="15dp" 
    android:textStyle="bold" /> 

<TextView 
    android:id="@+id/View1" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignParentLeft="true" 
    android:layout_alignParentTop="true" 
    android:text="TextView" 

    android:textSize="15dp" 
    android:textStyle="bold" 
    android:visibility="invisible" /> 

<TextView 
    android:id="@+id/View2" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignBaseline="@+id/textView1" 
    android:layout_alignBottom="@+id/textView1" 
    android:layout_marginLeft="31dp" 
    android:layout_toRightOf="@+id/textView1" 
    android:text="TextView" 

    android:textSize="15dp" 
    android:textStyle="bold" 
    android:visibility="visible" /> 

<TextView 
    android:id="@+id/ViewStatus" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignBaseline="@+id/View2" 
    android:layout_alignBottom="@+id/View2" 
    android:layout_alignParentRight="true" 
    android:text="Pending" 

    android:textSize="15dp" 
    android:textStyle="bold" /> 

<TextView 
    android:id="@+id/textView2" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignBaseline="@+id/ViewStatus" 
    android:layout_alignBottom="@+id/ViewStatus" 
    android:layout_marginRight="14dp" 
    android:layout_toLeftOf="@+id/ViewStatus" 
    android:text="Status:" 

    android:textSize="15dp" 
    android:textStyle="bold" /> 

<Button 
    android:id="@+id/mytask" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignParentLeft="true" 
    android:layout_below="@+id/textView1" 
    android:text="Button" /> 

+0

添加OnClickListener到按鈕... – ElDuderino

+0

不工作。給力克洛斯 – user3256145

+0

張貼您的適配器代碼,@ElDuderino是正確的。 –

回答

0

這是不可能的。你可以重寫getView,但是你也可以使用任何其他的適配器... SimpleAdapter只是將字符串映射到一個視圖,沒有別的。

1

您可以使用SimpleAdapter,但也可以覆蓋getView。你應該檢查關於getView如何工作的文檔,通過你如何實現它,似乎你不太瞭解適配器基礎知識:只有在ListView生成不同行時纔會創建按鈕,這是第一次,在設置適配器後的某個時間點將在異步發生。

ListAdapter k=new SimpleAdapter(this,val1,R.layout.mytask,new String[]{"TaskId","heading","status"},new int[]{R.id.View1,R.id.View2,R.id.ViewStatus}) { 
    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 

     // get filled view from SimpleAdapter 
     View itemView=super.getView(position, convertView, parent); 
     // find our button there 
     View myTaskButton=itemView.findViewById(R.id.mytask); 
     // add an onClickListener 
     myTaskButton.setOnClickListener(new OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       // your button is pressed on this view 
      } 
     }); 
     return itemView; 
    } 
}; 

或者更好,避免造成內部getView對象()這樣的預創建一個監聽器,你將重用:

OnClickListener mTaskClickListener=new OnClickListener() { 
    @Override 
    public void onClick(View v) { 
     // your button is pressed on this view, position is stored in tag. 
     Integer positionPressed=(Integer)v.getTag(); 
    } 
}; 
ListAdapter k=new SimpleAdapter(this,val1,R.layout.mytask,new String[]{"TaskId","heading","status"},new int[]{R.id.View1,R.id.View2,R.id.ViewStatus}) { 
    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 

     // get filled view from SimpleAdapter 
     View itemView=super.getView(position, convertView, parent); 
     // find our button there 
     View myTaskButton=itemView.findViewById(R.id.mytask); 

     // add an onClickListener, but this time is alredy created and the same for all 
     myTaskButton.setOnClickListener(mTaskClickListener); 
     myTaskButton.setTag(position); // so we know which tag was pressed 
     return itemView; 
    } 
}; 
+0

您的答案很酷! (Y) –

相關問題