2012-03-22 5 views
1
나는 내 모든 응용 프로그램을 통해 사용 HeaderView라는 클래스했다

: 내 활동에안드로이드 - GUI onResume를 업데이트하지

public HeaderView(Context context, AttributeSet attrs) { 
    super(context, attrs); 
    ctx = context; 

    commonApi = AAALifestyleApplication.commonApi; 
    user = commonApi.getCurrentUser(); 

    inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    inflater.inflate(R.layout.header_view, this, true); 

    ((ImageView)this.findViewById(R.id.logo)).setOnClickListener(this); 

    inboxButton = (ImageView) this.findViewById(R.id.inbox_image); 
    inboxButton.setOnClickListener(this); 
    inboxButton2 = (ImageView) this.findViewById(R.id.inbox_image2); 
    inboxButton2.setOnClickListener(this); 

    requestsButton = (ImageView) this.findViewById(R.id.requests_image); 
    requestsButton.setOnClickListener(this); 
    requestsButton2 = (ImageView) this.findViewById(R.id.requests_image2); 
    requestsButton2.setOnClickListener(this); 

    progressBar = (ProgressBar) this.findViewById(R.id.header_progress_bar); 
    if (!showProgressBar) { 
     progressBar.setVisibility(INVISIBLE); 
    } 
    AAAAsyncTask.setProgressBarListener(this); 

    refreshView(); 
} 

public static void refreshView(){ 
    SharedPreferences sp = ctx.getSharedPreferences("HeaderView", Context.MODE_PRIVATE); 
    int newMessages = sp.getInt("newMessagesCount", 0); 
    int newRequests = sp.getInt("newRequestsCount", 0); 
    if(newMessages > 0){ 
     Log.d("daim", "new messages!"); 
     inboxButton.setVisibility(View.GONE); 
     inboxButton2.setVisibility(View.VISIBLE); 
    } 
    else{ 
     Log.d("daim", "no new messages!"); 
     inboxButton.setVisibility(View.VISIBLE); 
     inboxButton2.setVisibility(View.GONE); 
    } 
    if(newRequests > 0){ 
     requestsButton.setVisibility(View.GONE); 
     requestsButton2.setVisibility(View.VISIBLE); 
    } 
    else{ 
     requestsButton.setVisibility(View.VISIBLE); 
     requestsButton2.setVisibility(View.GONE); 
    } 
} 

가이 HeaderView이 그것 XML에 지정된, 또한 onResume에서 원인에서 OnCreate 호출되는()이 같은 다음에서 onCreate() 메소드이 제대로 작동하지만에서

@Override 
public void onResume(){ 
    super.onResume(); 
    HeaderView.refreshView(); 
} 

onResume() 나는 메시지의 적당한 양을 얻고 심지어이 기록, 그래서 그 "아니오 새 메시지"확실히 알 인쇄되어 있지만 setVisibility() 메서드는 전혀 업데이트되지 않으며 대신 이전의 Im이 표시됩니다. ageView 내가 "새 메시지"를 보았을 때.

제발, 내가 그 문제가 있는지 확인하기 위해 스레드와 함께 처리기를 사용하여 시도했지만 여전히 이런 식으로 남아 있습니다.

답변

0

보기를 인스턴스화하고 refreshView을 비 정적으로 만들어야합니다.

이처럼 Activity 선언 :

public class YourActivity extends Activity { 
    private HeaderView mHeaderView; 

    @Override 
    public void onCreate(Bundle savedInstanceState){ 
     super.onCreate(savedInstanceState); 
     mHeaderView = new HeaderView(this); 
    } 

    @Override 
    public void onResume(){ 
     super.onResume(); 
     mHeaderView.refreshView(); 
    } 
} 

을 그리고 당신의 refreshView 메소드 선언에 static 키워드를 제거합니다.

+0

HeaderView (컨텍스트 컨텍스트, AttributeSet attrs) : 할 수 없어 headerView = new HeaderView (this)? – Carnal

+0

HeaderView (컨텍스트)도 구현하고 단계를 수행했지만 여전히 작동하지 않습니다! – Carnal

+0

컨텍스트 만있는 두 번째 생성자를 만드십시오. "마우스 오른쪽 버튼 - 소스 - 수퍼 클래스에서 생성자 생성"을 통해 생성자를 자동 생성하는 경우 Eclipse는 가능한 모든 생성자 (필요한) 생성자를 자동으로 생성합니다. – Thommy

관련 문제