2017-09-06 67 views
1

在我的android應用程序中,我使用抽球獲取一些信息,然後動態創建佈局。問題是我想添加一個按鈕點擊偵聽器到動態創建的佈局視圖之一,但我必須等到凌空響應。這是一個按鈕點擊偵聽器,所以我不能把OnClickListener放在響應塊中,所以這裏是一個問題:如何理解何時生成響應並將OnClickListener放入其中?Android - 在排球響應生成時運行一段代碼

+1

嗯,你爲什麼認爲你可以」在響應塊中設置點擊監聽器?沒有理由你不能。 –

+1

你想知道什麼時候獲取信息嗎? –

+0

@RohitSingh是的,正好。並運行一個像OnClickListener這樣的代碼,在完全加載java文件後需要滿足,所以我不能使用布爾值或類似的東西。 – NiethanX

回答

1

試試這個,當你從凌空得到的數據:

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

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

1

您可以使用廣播接收器得到通知時,你的數據被取出(或解析)。
你可以這樣做。
編寫一條廣播消息來告訴數據被提取。
你可以做這樣的事情在凌空你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,如果你不知道他們。

`

0

過帳方法來發布凌空請求。在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); 
} 

希望這有助於。

0

在響應塊,你也可以寫

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

我希望這幫助