Как да обновя Android GridView?

Пиша код в Android за опресняване на Gridview на всеки 2 минути. Търсих много в мрежата, но не намерих конкретна техника за това.

Код на Java

MainActivity.java

package com.example.mycustomgridrefresh;

import java.util.ArrayList;

import android.os.Bundle;
import android.widget.GridView;
import android.app.Activity;

public class MainActivity extends Activity
{     

GridView gd;

MyGrid mg;

ArrayList<String> abc;

@Override
protected void onCreate(Bundle savedInstanceState)
{

    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_main);

    gd = (GridView)findViewById(R.id.gd);

    abc = new ArrayList<String>();

    for(int i=0;i<100;i++)
    {
        abc.add(String.valueOf(i));

    }

    mg = new MyGrid(this,this,abc);

    gd.setAdapter(mg);

}}

MyGrid.java

package com.example.mycustomgridrefresh;
import java.util.ArrayList;
import android.app.Activity;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;

 public class MyGrid extends BaseAdapter
 {

ArrayList<String> abc;

Activity activity;

public MyGrid(Activity activity , Context cont,ArrayList<String> abc)
{

    super();

    this.abc = abc;

    this.activity = activity;

}

@Override
public int getCount() 
{
    return abc.size();
}

@Override
public Object getItem(int arg0) 
{

     return abc.get(arg0);
}

@Override
public long getItemId(int arg0) 
{

    return 0;


}

public class ViewHolder
{

    public TextView txt;

}


@Override
public View getView(int arg0, View arg1, ViewGroup arg2) 
{

    ViewHolder view;

    LayoutInflater inflator = activity.getLayoutInflater();

    if(arg1==null)
    {

        view = new ViewHolder();

        arg1 = inflator.inflate(R.layout.mygrid, null);

        view.txt = (TextView) arg1.findViewById(R.id.txt);

        arg1.setTag(view);

    }
    else
    {

        view = (ViewHolder) arg1.getTag();

    }

    view.txt.setText(abc.get(arg0));

    return arg1;

}


}

Тази горна мрежа отпечатва 100 числа, 10 реда и колони. Искам да променя стойността на клетките на мрежата за всеки 2 минути. Стойността трябва да се промени на +1.

Моля, предложете ми добро решение.

Благодаря предварително !!!


person Anshuman Pattnaik    schedule 17.05.2014    source източник


Отговори (1)


За да опресните стойностите, трябва да извикате в MyGrid:

notifyDataSetChanged() 

За да изпълнявате всяка задача на всеки 2 минути, трябва да създадете друга нишка, нещо подобно:

public void startRunnable(){
   Runnable r = new Runnable() {        
        @Override
        public void run() {
         while(needToRefresh){
            //add one...
            this.notifyDataSetChanged();
            Thread.sleep(2000);
         }
    }
    };

    this.activity.runOnUiThread(r);
}

Не забравяйте да спрете needToRefresh условието onPause, onStop.

РЕДАКТИРАНЕ: Тъй като notifyDataSetChanged() трябва да бъде извикан в UI поток, трябва да извикате runnable с помощта на this.activity.runOnUiThread Вижте там: Как да използвате notifyDataSetChanged() в нишка

person RuiOliveiras    schedule 17.05.2014
comment
Например създайте функция в MyGrid: startRunnable(), която ще създаде нов runnable в нова нишка. След това го използвайте след gd.setAdapter(mg); - person RuiOliveiras; 18.05.2014