2014-04-30 2 views
0

저는 라인의 메소드를 호출하고 다음 라인에서 이전 메소드를 완료해야하는 다른 메소드를 호출하는 데 문제가 있습니다. 그러나 어떤 일이 일어나지 않고 NPE를 얻는 것은 아닙니다.코드가 이상하게 비동기입니다.

@Override 
    public void onReceive(Context context, Intent intent) { 
     String target = intent.getStringExtra(MyService.EXTRA_NICK); 
     addPVTTab(target); 

    } 
: 수신기에 다음

public void addPVTConversa(String target) { 
    pvts.add(new Conversa(this, target)); 
    Intent it = new Intent(MyService.ACTION_NEW_PVT); 
    it.putExtra(MyService.EXTRA_NICK, target); 
    LocalBroadcastManager.getInstance(MyService.this).sendBroadcast(it); 
} 

을 그리고 :

내가 긴

@Override 
public boolean onItemLongClick(AdapterView<?> adapter, View arg1, int pos, 
     long arg3) { 

    String nick = ((UserList) adapter.getAdapter()).getLista().get(pos) 
      .getNick(); 

    if (activity.service.getConversa(nick) == null) { 
     activity.service.addPVTConversa(nick); //need this completed 
    } 
     activity.selectTab(nick); //to call this 

    return true; 
} 

그런 다음 내가 addPVTConversa()로 이동 목록을 클릭 할 때 시작, 내 라인

여기 내 문제가 있습니다 : 나는 selectTab() 메소드가 필요합니다. addPVTTab() 후에 호출되어 selectTab()가 아직 생성되지 않은 탭을 찾고 있기 때문입니다. 모든 코드는 주 스레드에서 실행되지만 selectTab()는 addPVTTab()보다 먼저 호출됩니다. 어떻게해야합니까? 미리 감사드립니다.

답변

1

예, 이것은 sendBroadcast()/onReceive()으로 예상됩니다. 대신 receiver.onReceive()selectTab()으로 전화해야합니다.

+0

그것은 내 인생을 복잡하게 만들 것이다. 그러나 만일 theres가 다른 방법으로 그것을 바꿀 것 인. 감사. –

+0

인터페이스를 사용하여 새 탭이 추가되었다는 메시지를 전달할 수도 있습니다. 그것은 동기 호출이 될 것입니다. – mikejonesguy

관련 문제