Android - Не обновляется графический интерфейс - PullRequest
1 голос
/ 22 марта 2012

У меня есть класс HeaderView, который я использую во всем приложении:

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 вызывается onCreate, потому что он указан в XML, а также в onResume (), как это:

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

В методе onCreate () это работает правильно, но onResume () я получаю правильное количество сообщений и даже зарегистрировал это, так что я точно знаю, что «никаких новых сообщений» не печатается, но метод setVisibility () вообще не обновляется, и вместо этого я вижу предыдущий ImageView, когда у меня были «новые сообщения».

Пожалуйста, помогите, я пытался использовать обработчик с потоком, чтобы увидеть, еслив этом была проблема, но она все еще остается такой.

1 Ответ

0 голосов
/ 22 марта 2012

Вы должны создать экземпляр своего представления и сделать 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();
    }
}

И удалите ключевое слово static в объявлении refreshView метода.

...