2017-01-02 13 views
0

就像標題所說,我試圖爲另一個XML文件中的視圖設置OnClickListener。我嘗試了下面的代碼,雖然我沒有得到任何異常,但它不起作用。如何爲不在main_activity.xml中的視圖設置OnClickListener?

LayoutInflater layoutInflater = getLayoutInflater(); 
    View view = layoutInflater.inflate(R.layout.single_row,null,false); 
    mImageButton = (ImageButton)view.findViewById(R.id.shareImageButton); 
    mImageButton.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      Snackbar.make(v, "working on it", Snackbar.LENGTH_LONG) 
        .setAction("Action", null).show(); 
     } 
    }); 

我的ImageButton位於另一個XML文件中。 NEEEEEED幫助

+0

什麼是你真正想要做 - 你的代碼將設置一個onclicklistener,但它不會將視圖添加到UI。您必須將視圖添加到父級來執行此操作。 –

+0

但如何將視圖添加到父級?即使我想在控制檯上顯示一條消息,它也不起作用。 –

+0

這是來自xml,是XML已經膨脹? –

回答

0

根據提供的內容,看起來您並未將視圖添加到父佈局。

假設父佈局已經膨脹,你只需添加視圖,像這樣

yourParentView.addView(view); 

這可能不會有希望的影響,雖然,因爲這將最有可能的(前提是你沒玩過與父母的重力)將視圖放置在左上角。

您需要通過LayoutParams將視圖放置在您想要的位置。

例子是RelativeLayout.LayoutParams或LinearLayout.LayoutParams

一旦你選擇並創建的LayoutParams,你會用這個代替

yourParentView.addView(view, createdLayoutParams); 
+1

我發現了這個問題。我將用於設置偵聽器的代碼移到了我的recycleview.adapter類中,並且運行良好。 –

0

通過將其包含在main_activity.xml文件中來使用另一個single_row.xml。

粘貼下面的代碼你main_activity.xml文件中:

<include layout:"@layout/single_row.xml" /> 

現在你可以使用你的ImageButton正常像main_activity.xml其他意見。在MainActivity.class的onCreate()方法中添加下面的代碼。

ImageButton mImageButton = (ImageButton)findViewById(R.id.shareImageButton); 
mImageButton.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View v) { 
     Snackbar.make(v, "working on it", Snackbar.LENGTH_LONG) 
       .setAction("Action", null).show(); 
    } 
}); 
+0

我發現了這個問題。我將用於設置監聽器的代碼移到了我的recycleview.adapter類中,並且效果很好 –

+0

很高興在這裏您已經獲得瞭解決方案。希望我的回答能夠幫助別人。 :) –

相關問題