2016-02-26 83 views
0

對noob問題抱歉。我有一個操作欄按鈕,將一個片段注入主要活動。該代碼工作正常時,它是onOptionsItemSelected塊中,像這樣:Android從內部調用一個類onOptionsItemSelected

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    Intent intent; 
    switch (item.getItemId()) { 
     case R.id.action_chat: 
      Log.v("Click", "Chat button"); 

      RelativeLayout mainLayout = (RelativeLayout) findViewById(R.id.main_layout); 
      LinearLayout ll = new LinearLayout(this); 
      ll.setId(999); 
      getFragmentManager().beginTransaction().add(ll.getId(), ChatFragment.newInstance()).commit(); 
      mainLayout.addView(ll); 
      break; 
     case R.id.action_settings: 
      intent = new Intent(this, SettingsActivity.class); 
      startActivity(intent); 
      break; 
    } 


    return super.onOptionsItemSelected(item); 
} 

但我想有一個外部類處理片段插入(因爲這是一些需要提供給其他活動好)。所以,我把它稱爲是這樣的:

  case R.id.action_chat: 
      ChatHandler chatHandler = new ChatHandler(); 
      chatHandler.goChat(View view); 
      break; 

而且在ChatHandler類:

public class ChatHandler { 
     public void goChat(View view) { 
      Log.v("GoChat", "Start"); 
      RelativeLayout mainLayout = (RelativeLayout) view.findViewById(R.id.main_layout); 
      LinearLayout ll = new LinearLayout(this); 
      ll.setId(999); 
      getFragmentManager().beginTransaction().add(ll.getId(), ChatFragment.newInstance()).commit(); 
      mainLayout.addView(ll); 
     } 
    } 

我的問題是什麼參數,我需要在主要活動goChat傳遞以及如何(查看查看?)我是否參考ChatHandler類中的主要活動,如LinearLayout中的this = new LinearLayout(this);

謝謝!

+0

你不應該在非活動類中執行UI任務。這樣你將不得不傳遞整個活動實例,並使諸如'mainLayout'等少量變量公開。不是一個好方法。 – Rohit5k2

回答

1

改變這種

public void goChat(Context context) 
{ 
    Log.v("GoChat", "Start"); 
    RelativeLayout mainLayout = (RelativeLayout) ((Activity)context).findViewById(R.id.main_layout); 
    LinearLayout ll = new LinearLayout(context); 
    ll.setId(999); 
    getFragmentManager().beginTransaction().add(ll.getId(), ChatFragment.newInstance()).commit(); 
    mainLayout.addView(ll); 
} 
+0

將無法​​訪問您錯誤的'mainLayout' – Rohit5k2

+0

。不要試圖冷靜下來。 – inkedTechie

+0

真的先試試吧。 'getFragmentManager()'應該是'context.getFragmentManager()'。 'mainLayout'在這裏將無法訪問。另外,像這樣做UI操作並不是一個好的(正確的)方式 – Rohit5k2

-1

您應該傳遞活動作爲參數爲goChat方法

case R.id.action_chat: 
     ChatHandler chatHandler = new ChatHandler(); 
     chatHandler.goChat(this); 
     break; 

然後在類:代碼

public void goChat(Activity activity) { 
     Log.v("GoChat", "Start"); 
     RelativeLayout mainLayout = (RelativeLayout) activity.findViewById(R.id.main_layout); 
     LinearLayout ll = new LinearLayout(activity); 
     ll.setId(999); 
     activity.getFragmentManager().beginTransaction().add(ll.getId(), ChatFragment.newInstance()).commit(); 
     mainLayout.addView(ll); 
    } 
+0

將無法​​訪問'mainLayout' – Rohit5k2