Задать вопрос
@paleniy

Почему GridView не заполняется новыми данными после notifyDataSetChanged в thread?

Добрый день!
При вызове notifyDataSetChanged() в Thread не обновляются данные в ячейках. Ошибок при этом нет.
Если вызывать непосредственно в Oncreate, то данные обновляются.
Подскажите, в чем проблема?
code
public class MainActivity extends AppCompatActivity {
    public GridView Grid;
   public String[] data = {"0","1","2","3","4","5","6","7","8"};
    public Button ButtonGo;
  public  TextViewAdapter myTextViewAdapter;
    public SquareTextView textView;
    public View gridView;

...

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        setTheme(R.style.AppTheme);
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
       ButtonGo = (Button) findViewById(R.id.ButtonGo);
        Grid = (GridView) findViewById(R.id.GridView);
       myTextViewAdapter = new TextViewAdapter(this, data);
        Grid.setAdapter(myTextViewAdapter);
        Grid.setOnItemClickListener(gridViewOnItemClickListener);
....

public void TimerStart(final int cellposition,final long celltime,final long celltimer) {
    final Thread ThreadTimer = new Thread() {
        public void run() {
            try {
                while (System.currentTimeMillis() < celltime + celltimer) {
                    Thread.sleep(100);
                }
          if ((System.currentTimeMillis() >= celltime + celltimer)){
                        runOnUiThread(new Runnable() {
                            @Override
                            public void run() {
                                data[cellposition]="123";
                                myTextViewAdapter.notifyDataSetChanged();
                            }
                        });      }
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    };

    final Handler handlerTimer = new Handler();
    handlerTimer.post(new Runnable() {
        @Override
        public void run() {
            ThreadTimer.start();
        }
    });
    }
public void ClickGo(View view) {
        ButtonGo.setVisibility(View.INVISIBLE);
TimerStart(1,System.currentTimeMillis(),10000);
    }

...

    public class TextViewAdapter extends BaseAdapter {
        private Context context;
        private final String[] textViewValues;

        public TextViewAdapter(Context context, String[] textViewValues) {
            this.context = context;
            this.textViewValues = textViewValues;
        }

        public View getView(int position, View convertView, ViewGroup parent) {
            LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            if (convertView == null) {
                gridView = inflater.inflate(R.layout.item, null);
                textView = (SquareTextView) gridView.findViewById(R.id.cellTextView);
                textView.setText(textViewValues[position]);
            } else {
                gridView = (View) convertView;
            }
            return gridView;
        }

        @Override
        public int getCount() {
            return textViewValues.length;
        }

        @Override
        public Object getItem(int position) {
            return null;
        }

        @Override
        public long getItemId(int position) {
            return 0;
        }
    }

  • Вопрос задан
  • 390 просмотров
Подписаться 1 Оценить 4 комментария
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы