2017-03-02 38 views
-2

EDITED的Android onClickListener定製味道

感謝所有投我負面的,但不嘗試幫助沒有被解僱。這真的很有用。

這個主要問題是我有2個相同的片段,一個在主要和其他高級風味。所以系統總是加載保存在main中的片段,並且因爲按鈕偵聽器從不被調用。

你可以解決它去除主路徑上的片段,並創建你有充分的味道片段,通過這種方式適當的片段將被選中

如果你想有一個不同的版本相同的在兩個 類,你需要創建它在這兩種口味,並從主要刪除它。

src/flavor1/java/com/foo/A.java 

src/flavor2/java/com/foo/A.java 

然後你在src/main/java代碼可以做:

import com.foo.A 

取決於選擇的香料,的com.foo.A正確的版本是用於 。

原來的問題

我試圖在未在主味所示的「溢價」的味道來設置按鈕。問題是按鈕顯示在用戶界面中,但onClickListener永遠不會被觸發。

我的結構如下:

我有一個包含片段的活動。這項活動對所有風味都是獨一無二的,但片段將隨着風味而改變。其中一種味道包含一種在主要味道中未顯示的按鈕。當點擊那個按鈕時,沒有任何反應。

下面是相關的代碼:

活性XML是:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout 
    ... 
    android:orientation="vertical" 
    android:weightSum="10" 
    tools:context=".activities.ConfigurationActivity"> 

<ImageView 
     ... 
     android:layout_weight="2"/> 

<FrameLayout 
     android:id="@+id/configurationFragment" 
     android:layout_width="match_parent" 
     android:layout_height="0dp" 
     android:layout_weight="8"/> 

</LinearLayout> 

活性代碼是:

package com.abc.project.activities; 
public class ConfigurationActivity extends AppCompatActivity { 
    private Fragment confFragment; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_configuration); 

     confFragment = new ConfigurationFragment(); 
     getSupportFragmentManager() 
      .beginTransaction() 
      .replace(R.id.configurationFragment, confFragment) 
      .commit(); 
    } 
} 

主要片段 XML是:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
      ... 
      android:orientation="vertical" 
      tools:context="com.abc.project.fragments.ConfigurationFragment"> 

<TextView 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:text="Main fragment"/> 

</LinearLayout> 

主要碎片代碼:

package com.abc.project.fragments; 
public class ConfigurationFragment extends Fragment { 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 
     View view = inflater.inflate(R.layout.fragment_configuration, container, false); 

     return view; 
    } 
} 

溢價片段 XML是:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
      ... 
      android:orientation="vertical" 
      tools:context="com.abc.project.premium.fragments.ConfigurationFragment"> 

<TextView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="Premium fragment!"/> 

<Button 
     android:id="@+id/premiumButton" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="Button premium"/> 
</LinearLayout> 

而且溢價片段代碼:

package com.abc.project.premium.fragments; 
public class ConfigurationFragment extends Fragment { 
    private Button premiumButton; 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 

     View view = inflater.inflate(R.layout.fragment_configuration, container, false); 

     premiumButton = (Button)view.findViewById(R.id.premiumButton); 
     premiumButton.setOnClickListener(premiumOnClickListener); 

     return view; 
    } 

    private View.OnClickListener premiumOnClickListener = new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      //THIS CODE NEVER IS FIRED 
     } 
    }; 
} 

所以, 「高級」xml顯示正常,但該按鈕不會觸發onClickListener。

任何人都知道爲什麼會發生這種情況?

在此先感謝。

Regards, Kemmitorz。

+0

是否有2個具有相同'ConfigurationFragment'名稱的類? – Ircover

+0

是的,但在不同的包裝。在包的一個主要的好處,另一個在包相關的溢價味 – kemmitorz

+0

使用view.getId()裏面onclick事件 –

回答

0

你的片段需要View.OnClickListener

public class InputFragment extends Fragment implements View.OnClickListener 

來實現,然後改變你的代碼如下

onActivityCreated(Bundle savedInstanceState){ 

btn = (Button) view.findViewById(R.id.btnClick); 

btn.setOnClickListener(this); 

} 

@Override 
public void onClick(View view){ 

switch (v.getId()) { 
    case R.id.btn: 

     //HERE YOU CAN PERFORM YOUR ACTION 
     break; 
    default: 
     break; 
    } 
} 
0

發現的解決方案在這裏:

Android Studio build flavors - How to have same source files in diverse flavors

如果你想要在兩種風格中有相同類別的不同版本,你需要在兩種風格中創建它並從主要中刪除它。

src/flavor1/java/com/foo/A.java 

src/flavor2/java/com/foo/A.java 

然後你在src/main/java代碼可以做:

import com.foo.A 

取決於選擇的香料,的com.foo.A正確的版本是用於 。