2016-06-23 3 views
0

Android 애플리케이션을 개발 중입니다. 그 중 onCreateView 메서드에서 어댑터 클래스 (MyAdapter 확장 BaseAdapter)에 대한보기를 만드는 조각 활동이 있습니다. onCreateView 코드의 단편되는 다음 - 그래서 a_timed_time 필요성 값으로조각 활동의 어댑터 클래스보기 업데이트

if(intent.getAction().equals(BroadcastHelper.DEPARTURE_TIME)){ 
       Bundle args = intent.getExtras(); 
       if (args != null) { 
        int departure_time = args.getInt("Departure"); 
        updateDepartureTime(departure_time); 
       } 
      } 
      else if(intent.getAction().equals(BroadcastHelper.ARRIVAL_TIME)){ 
       Bundle args = intent.getExtras(); 
       if (args != null) { 
        int arrival_time = args.getInt("Arrival"); 
        updateArrivalTime(arrival_time); 
        } 
      } 



     public void updateDepartureTime(int time){ 
      int d_time = time; 
      } 

     public void updateArrivalTime(int time){ 
      int a_time = time; 
      } 

-

mAdapter = new MyAdapter(getActivity(), null, 0); 
    mListView = (AbsListView) view.findViewById(android.R.id.list); 
    mListView.setEmptyView(emptyView); 
    mListView.setAdapter(mAdapter); 

MyFragment 클래스와 같은 다른 클래스의 방송 데이터를 수신하고 인 단편 활동 뷰로 보내지고 뷰의 텍스트 뷰에서 업데이트됩니다. viewHolder은 MyAdapter 클래스에서 tetxview를 표시합니다. MyFragment 클래스에서 어떻게 수행합니까?

답변

0

일부 이벤트 버스 라이브러리 https://github.com/greenrobot/EventBus 또는 https://github.com/square/otto을 사용하십시오. 이를 구현하면 활동에

public interface OnChange{ 
    void onDepartureChanged(int value); 
    void onArrivalChanged(int value); 
} 

: 방송에서 데이터가 같은 응용 프로그램에서 오는 경우 인터페이스를 사용하려면 는, 이벤트 버스

에도 방송을 변경

@Override 
public void onDepartureChanged(int value) { 
    myAdapter.notifyDataSetChanged() 
} 

@Override 
public void onArriChanged(int value) { 
    myAdapter.notifyDataSetChanged() 
} 

및 다음과 같이 조각에 전달하십시오.

myFragment.registerOnValuesChange(this) 

마지막으로 rec eiving in Broadcast :

public void updateDepartureTime(int time){ 
    int d_time = time; 
    onValueListener.onDepratureChanged(d_time) 
} 

public void updateArrivalTime(int time){ 
    int a_time = time; 
    onValueListener.onArrivalChange(a_time) 
} 
+0

다른 방법이 있습니까 – Alb609

+0

예, pritish 대답에 설명 된대로 리스너로 인터페이스를 사용할 수 있습니다. –

+0

내가 어떻게 사용할 수 있는지 코드로 설명해 주시겠습니까? 도움이 될 것입니다. 내 viewholder는 overbind 메서드 인 onbindView()에 있습니다. – Alb609

0

1) 인터페이스를 사용하여 어댑터에서 확장하십시오. 값을 설정하고 notifydatasetchanged()를 수행하십시오. 2) 귀하의보기를 업데이 트하는 어댑터에 메서드를 작성하십시오. 방송의 수신기에 activty에서 전화하고 메서드를 호출하십시오. 그 방법은 notifydatasetchanged.

+0

제안한 두 번째 방법은 더 자세히 설명 할 수 있습니다. 그것은 도움이 될 것입니다 – Alb609

+0

당신이 전송하는 데이터의 종류와 그것을 구현하는 방법을 잘 모르겠습니다 .....하지만 일반적으로 당신이보기로 사용하고있는 어댑터 생성자에 어떤 데이터를 보내고 있어야합니다. mupdate (data) {yourAdapterData = data}와 notifydatasetchanged() 같은 메소드를 추가하십시오. notify 메서드를 사용하면 재정의 된 모든 메서드가 다시 호출되고 어댑터에 보내는 새 arraylist 또는 데이터가 필요한 데이터를 덮어 씁니다. – Pritish

+0

int 데이터입니다 ...하지만 내 viewholder는 bindView()에 있습니다. 어떻게해야합니까? 몇 가지 코드로 나를 도와 줄 수도 있습니다. 나는 다른 대답을 이해하지 못했다 – Alb609