Android Onclicklistener未以定制风味发射



编辑

感谢所有在没有尝试帮助的情况下投票给我负面的。这真的很有用。

这个主要问题是我有2个相同的片段,一个片段为主要片段,另一个则具有优质风味。因此,系统始终加载存储在Main中的片段,因此从未调用按钮侦听器。

您可以解决它从主路径上删除碎片并在每个风味中创建片段,以这种方式选择适当的片段

如果您想在两者中拥有不同的同一类的版本 风味您需要在两种口味中创建它并将其从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版本是

原始问题

我正在尝试设置一个"优质"风味的按钮,该味道未显示为主要风味。问题是该按钮在UI中显示,但是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;
    }
}

premium fragment 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
        }
    };
}

因此," premium" xml显示正确,但按钮不会发射onclicklistener。

有人知道为什么会发生吗?

预先感谢。

问候,Kemmitorz。

您的片段需要用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;
    }
}

解决方案:

Android Studio建立口味 - 如何在各种口味中拥有相同的源文件

如果您想在两者中拥有不同的同一类的版本 风味您需要在两种口味中创建它并将其从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版本为

相关内容

  • 没有找到相关文章

最新更新