【问题标题】:Conflict with buttons android与按钮android冲突
【发布时间】:2015-01-19 13:19:30
【问题描述】:

我有 2 个 xml 文件,“activity_main”和“main_screen”,每个都有 1 个按钮,这里是按钮的 xml:

登录按钮

<Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/entrar"
        android:id="@+id/button"
        android:onClick="onClick"
        android:layout_centerVertical="true"
        android:layout_centerHorizontal="true" />

“保存数据按钮”

<Button
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="Salvar"
            android:id="@+id/button2"
            android:onClick="onClick"
            android:layout_marginTop="43dp" />

第一个按钮的Java代码:

button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Editable login = editLogin.getText();
                String loginTexto = login.toString();

                Editable pass = editPass.getText();
                String senhaTexto = pass.toString();

                try{
                    trocaTela();
                    System.out.println("botao login" + R.id.button);
                    //a.enviaDados(loginTexto, senhaTexto, textView);
                }catch(Exception e){
                    System.out.println(e.getMessage());
                }

            }
        });

第二个按钮的Java代码:

button2.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                final EditText editNome = (EditText) findViewById(R.id.nomeEdit);
                final EditText editDestino = (EditText) findViewById(R.id.destinoEdit);
                final EditText editKm = (EditText) findViewById(R.id.kmEdit);
                final TextView textView = (TextView) findViewById(R.id.textView);

                //pega o texto inserido no campo da placa
                Editable editable = editPlaca.getText();
                String placaTexto = editable.toString();

                //pega o nome inserido no campo do nome
                Editable nomeEditable = editNome.getText();
                String nomeTexto = nomeEditable.toString();

                //pega o destino inserido no campo do destino
                Editable destinoEditable = editDestino.getText();
                String destinoTexto = destinoEditable.toString();

                //pega o valor inserido no campo do km
                Editable kmEditable = editKm.getText();
                String kmTexto = kmEditable.toString();

                try {
                    ScreenFunctions f = new ScreenFunctions();
                    System.out.println("botao screen:" +  R.id.button2);
                    f.formatPost(nomeTexto, placaTexto, destinoTexto, kmTexto, textView);
                } catch (Exception e) {
                    System.out.println("Button press exception: " + e.getMessage());
                }
            }
        });

问题是......我不明白我将如何处理“onClick”函数,因为“onClick”方法是抽象的,所以我不能更改它的名称,第二个按钮怎么能使用MainScreen onClick 和第一个按钮使用 MainActivity onClick。

【问题讨论】:

    标签: java android button methods


    【解决方案1】:

    删除

    android:onClick="onClick"
    

    你不需要这个,因为你在你的 java 代码中设置了 onclicklisteners

    如果这有帮助,请告诉我信息

    编辑

    确保您已正确捕获按钮变量:

     button = (Button) findViewById(R.id.button);
     button2 = (Button) findViewById(R.id.button2;
    

    【讨论】:

    • 它消除了错误,但是第二个按钮正在调用第一个“onClick”方法,这就是问题所在,我需要它来调用第二个。我看不出这是怎么发生的,clickListener 在 button2 里面。
    【解决方案2】:

    删除 xml 文件中的 android:onClick="onClick"。 您误解了 xml 文件中 android:onClick 标记的用法。 请查看the document of android:onClick tag

    【讨论】:

      【解决方案3】:

      更改函数名称:

      android:onClick="onClick"
      

      android:onClick="someMethod"
      

      【讨论】:

      • 我不能,因为这两个按钮都是在“onCreate”方法中创建的,我需要它来调用 onClick INSIDE onCreate。
      • 试试这个stackoverflow.com/questions/5869871/… 链接...希望这有效
      【解决方案4】:

      我认为如果你想让你的代码更漂亮更好,你应该使用 ButterKnife 进行视图注入并指定 onclick 方法,如下所示:

      1.) 将 ButterKnife 添加到您的依赖项中

      dependencies {
          compile fileTree(dir: 'libs', include: ['*.jar'])
          ...
          compile 'com.jakewharton:butterknife:6.0.0'
      

      2.) 将您的观点注入现场

      @InjectView(R.id.button)
      public Button button;
      

      3.) 指定 onClick 方法

      @OnClick(R.id.button)
      public void myOnClickMethod(View view)
      {
          //do things
      }
      

      4.) 使用 ButterKnife 注入活动或片段

      活动:

      @Override
      public void onCreate(Bundle saveInstanceState)
      {
          super.onCreate(saveInstanceState);
          ButterKnife.inject(this);
          ...
      }
      

      片段:

      @Override
      public View onCreateView(LayoutInflater inflater, ViewGroup container,
          Bundle savedInstanceState)
      {
          View rootView = inflater.inflate(R.layout.fragment_main, container, false);
          ButterKnife.inject(this, rootView);
          ...
          return rootView;
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-03-16
        • 2013-04-18
        • 2014-07-11
        • 1970-01-01
        相关资源
        最近更新 更多