2014-05-17 45 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