Android - 在排球响应生成时运行一段代码

问题描述:

在我的android应用程序中,我使用抽球获取一些信息,然后动态创建布局。问题是我想添加一个按钮点击侦听器到动态创建的布局视图之一,但我必须等到凌空响应。这是一个按钮点击侦听器,所以我不能把OnClickListener放在响应块中,所以这里是一个问题:如何理解何时生成响应并将OnClickListener放入其中?Android - 在排球响应生成时运行一段代码

+1

嗯,你为什么认为你可以”在响应块中设置点击监听器?没有理由你不能。 –

+1

你想知道什么时候获取信息吗? –

+0

@RohitSingh是的,正好。并运行一个像OnClickListener这样的代码,在完全加载java文件后需要满足,所以我不能使用布尔值或类似的东西。 – NiethanX

试试这个,当你从凌空得到的数据:

button.performClick(); 
button.setPressed(true); 
+0

也可以在btn.setOnclicklistener上执行您想要的操作 –

您可以使用广播接收器得到通知时,你的数据被取出(或解析)。
你可以这样做。
编写一条广播消息来告诉数据被提取。
你可以做这样的事情在凌空你onResponse方法

public void onResponse(JSONObject response) {  

    try { 
     // Parsing 
     someMethod(); /// this is the method to notify idf data is fetched 

     } catch (JSONException e) { 
       e.printStackTrace(); 
     } 

} 

的someMethod()

public void someMethod(){ 
    Intent i = new Intent(); 
    i.setAction("Some key"); 
    sendBroadcast(i); 
} 

登记接收您的活动

BroadcastReceiver receiver = new YourReceiver(); 
IntentFilter filter = new IntentFilter(); 
filter.addAction("Some key"); 
registerReceiver(receiver, filter); 

最后一步:设置里面的onReceive您buttonListener()的方法 接收机

private class YourReceiver extends BroadcastReceiver{ 

    private Context context; 

    @Override 
    public void onReceive(Context context,Intent intent) 
    { 
     if(intent.getAction().equalsIgnoreCase("Some key")) 
     { 

      //Set your button listener here 
     } 
    } 
} 

注:致电您注册接收器后您接收器(可避免这种常见的错误)。
这是starting point to learn Broadcast Receiver,如果你不知道他们。

`

过帐方法来发布凌空请求。在onResponse您可以根据需要你这样的反应进行你的操作:

private void fetchData() { 
    StringRequest stringRequest = new StringRequest(mURL, 
      new Response.Listener<String>() { 
       @Override 
       public void onResponse(String response) { 
        if(expectedResponse){ 
         Button mBtn=new Button(getApplicationContext()); 
         mBtn.setOnClickListener(new View.OnClickListener() { 
         @Override 
         public void onClick(View v) { 
          //Conduct your operation here 
         } 
         }); 
        } 

       } 
      }, 
      new Response.ErrorListener() { 
       @Override 
       public void onErrorResponse(VolleyError error) { 
        Toast.makeText(VolleyExampleActivity.this, error.getMessage(), Toast.LENGTH_LONG).show(); 
       } 
      }); 

    RequestQueue requestQueue = Volley.newRequestQueue(this); 
    requestQueue.add(stringRequest); 
} 

希望这有助于。

在响应块,你也可以写

Button dynamicButton = new Button(getActivity()); 
dynamicButton.setId(0X000000); 
dynamicButton.setOnClickListener((View.OnClickListener)getActivity()); 

在点击监听器可以处理这样

@Override 
     public void onClick(View v) { 
      switch (v.getId()){ 
       case 0X000000: 
        Toast.makeText(getActivity(),"To something",Toast.LENGTH_LONG).show(); 
        break; 
      } 
     } 

我希望这帮助