2014-12-19 28 views
0

我有兩個Buttons以及文本ListView。當我點擊按鈕時Onclick監聽器不工作。Onclick無法在列表視圖中的按鈕來獲取TextView Android

以下是我的代碼:

list_details.xml

<ListView 
     android:id="@+id/list" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:layout_marginTop="60dp" /> 

list_item_details.xml

<TextView 
android:id="@+id/try_it" 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:textStyle="bold" 
android:text="tile try" /> 

<Button 
    android:id="@+id/download" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_gravity="left" 
    /> 

ListDetailsActivity.java

公共無效的onCreate(捆綁savedInstanceState){

super.onCreate(savedInstanceState); 
setContentView(R.layout.list_details); 

productsList = new ArrayList<HashMap<String, String>>(); 

new LoadAllProducts().execute(); 

ListView lv = getListView(); 

Button download = (Button) findViewById(R.id.download); 

download.setOnClickListener(new View.OnClickListener() { 

    public void onClick(View view) { 

     TextView try_txt = (TextView) findViewById(R.id.try_it); 

     String try_text_val = try_txt.getText().toString(); 

     Toast.makeText(getApplicationContext(), try_text_val, Toast.LENGTH_LONG).show(); 
    } 
    }); 
} 


protected void onPostExecute(String file_url) { 

      // updating UI from Background Thread 
      runOnUiThread(new Runnable() { 

       public void run() { 

       ListAdapter adapter = new SimpleAdapter(

         ListDetailsActivity.this, productsList, 
        R.layout.list_item_details, new String[] { TAG_TRY_IT}, 
        new int[] { R.id.try_it}); 

        // updating listview 
        setListAdapter(adapter); 
            } 
      }); 
    } 
    } 

非常感謝您的幫助!

+0

你可以在這裏找到一個例子http://stackoverflow.com/a/4461244/1007522它非常簡單。 – user1007522

回答

0

考慮在列表行佈局中爲每個按鈕使用。這可能是實現此目的最便捷的方式,幾乎總是如此。

+0

非常感謝!我可以使用onClick從xml頁面 – usd123

+0

@ usd123使它工作:不客氣。請在這種情況下檢查這個答案。 –

1

您只需要在自定義適配器中設置onClick事件。 (在getView方法中)

0

您只在第一個Button上設置OnClickListener,其編號爲R.id.download。當您使用findViewById()時,它只會返回具有請求的ID的第一個視圖,即使有更多。因爲您在Activity上調用它,所以它在列表視圖中具有多行,並帶有該標識的按鈕。

解決它的方法是在您的適配器中進行。您正在使用SimpleAdapter。製作您自己的適配器類並覆蓋getView()函數,以便在那裏附加OnClickListener。事情是這樣的:

private class MyAdapter extends SimpleAdapter { 
    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     View view = super.getView(position, convertView, parent); 
     View button = view.findViewById(R.id.download); 
     button.setOnClickListener(/* ... your code ... */); 
     return view; 
    } 
} 

查看座的設計模式

在您單擊處理你操縱TextViewR.id.try_it。因此,您需要爲findViewById()做一個findViewById()以及從getView()返回的視圖。視圖持有人設計模式是爲了這個用例。我的建議是閱讀Making ListView Scrolling Smooth上的Android教程,瞭解它的工作原理。

+0

非常感謝。我創建了一個自定義適配器,但是我在使用getClick()中的onClick啓動intent時遇到了問題。下面是代碼:bt1.setOnClickListener(new OnClickListener(){@Override public void onClick(View v){Uri uri = Uri.parse(「google.com」); Intent intent = new Intent(Intent.ACTION_VIEW,uri) ; context.startActivity(intent);}});如果您有任何建議,請讓我知道。 – usd123

+0

把協議放在uri中:'Intent intent = new Intent(Intent.ACTION_VIEW,Uri.parse(「https://google.com」));' –

相關問題