2014-05-17 44 views
0

我正在Android中编写代码,每2分钟刷新一次Gridview。我在网上搜索了很多,但我没有找到任何具体的技术来做到这一点。如何刷新Android GridView?

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。

请给我一些很好的解决方案。

在此先感谢!

回答

0

要刷新,你需要在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条件,onStop

编辑:由于notifyDataSetChanged()需要在UI线程中调用,您需要使用this.activity.runOnUiThread 看到有来电可运行:How to use notifyDataSetChanged() in thread

+0

谢谢你这么多,但我在哪里的权利....? – animation123

+0

例如,在MyGrid中创建一个函数:'startRunnable()',它将在新线程上创建一个新的可运行的。在'gd.setAdapter(mg);'后面使用它 – RuiOliveiras