2016-12-16 183 views
0

为什么内部监听器(addAddress和cancelAddress)不工作? Everythings OK,但点击监听器膨胀viewStub无效。这些按钮添加在该viewStub中。在Android的另一个监听器中定义监听器

private View addressStubInflated; 
//... 
final View fview = inflater.inflate(R.layout.fragment_address, container, false); 
//... 
final ViewStub addressStub = (ViewStub) fview.findViewById(R.id.address_viewStub); 
final Button addAddress = (Button) fview.findViewById(R.id.add_address_button); 
final Button cancelAddress = (Button) fview.findViewById(R.id.cancel_address_button); 
final ViewGroup addressesParent = (ViewGroup) fview.findViewById(R.id.addresses_container); 
final Button addNewAddress = (Button) fview.findViewById(R.id.add_address); 

addNewAddress.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       //some codes ... OK 
       if (addressStub.getParent() != null) { 
        addressStubInflated = addressStub.inflate(); //OK 
       } else { 
        addressStubInflated.setVisibility(View.VISIBLE); //OK 
       } 

       addressStub.setOnInflateListener(new ViewStub.OnInflateListener() { 
        @Override 
        public void onInflate(ViewStub viewStub, View view) { 
         addAddress.setOnClickListener(new View.OnClickListener() { 
          @Override 
          public void onClick(View view) { 
           addressStubInflated.setVisibility(View.GONE); //not work 
           addNewAddress.setVisibility(View.VISIBLE); //not work 
           addressesParent.setVisibility(View.VISIBLE); //not work 
          } 
         }); 

         cancelAddress.setOnClickListener(new View.OnClickListener() { 
          @Override 
          public void onClick(View view) { 
           addressStubInflated.setVisibility(View.GONE); //not work 
           addNewAddress.setVisibility(View.VISIBLE); //not work 
           addressesParent.setVisibility(View.VISIBLE); //not work 
          } 
         }); 
        } 
       }); 
      } 
     }); 
+1

请出示你的,你指定'addAddress' –

+1

还添加日志语句转换成'onInflate',看看它打印 –

+1

为什么不只需点击一下并检查点击视图的ID?意思是你可以有一个听众3个按钮,只需将其连接到所有3没有任何疯狂 –

回答

1

我认为这里的问题是,每次单击一个按钮时,您都会一次又一次地设置addressStub.setOnInflateListener

您只需在onCreate中设置一次膨胀监听器。然后按钮可以保持膨胀视图,当然,但至少应该触发膨胀监听器。

此外,让您的类实现OnClickListener接口可以删除“回调地狱”

+0

我将addressStub.setOnInflateListener移出,现在,我有两个按钮的空对象错误:addAddress和cancelAddress – Giliapps

+1

现在在移动的addressStub.setOnInflateListener中定义的按钮解决了我的问题。谢谢你,先生。 – Giliapps