我尝试平滑地更新gridview背景颜色,但它不能正常工作。 当我在那时scrool gridview它变得; PLZ指导我怎么做,下面是我的代码,谢谢你。
TableGridViewAdapter gridadapter;
GridView gridview;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
textViewUname = (TextView) this.findViewById(R.id.userName);
textViewUname.setText("Welcome , " + HomeActivity.name);
gridview = (GridView) findViewById(R.id.gridview);
gridadapter=new TableGridViewAdapter(this);
gridview.setAdapter(gridadapter);
//adapter.notifyDataSetChanged();
UpdateGridview updateGridview=new UpdateGridview();
updateGridview.execute(TableActivity.this);
// code for onClick gridview items , It take to that Activity
gridview.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View v,
int position, long id) {
ConText.currentPos = position;
Intent i = new Intent(TableActivity.this,
OrderListActivity.class);
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK
| Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(i);
finish();
}
});
}
}
}
这里我尝试每20秒刷新一次视图
private class UpdateGridview extends AsyncTask<Context, Integer, String>
{
@Override
protected String doInBackground( Context... params )
{
int i = 0;
while( i <10)
{
try{
gridadapter.notifyDataSetChanged();
// gridadapter.refreshItems(gridadapter);
gridview.invalidate();
//TableGridViewAdapter.refreshItems(gridadapter);
Thread.sleep( 20000 );
System.out.println("i called notifyDataSetChanged()=======================");
i++;
} catch( Exception e ){
Log.i("makemachine", e.getMessage() );
}
}
return "COMPLETE!";
}
// -- gets called just before thread begins
@Override
protected void onPreExecute()
{
Log.i( "makemachine", "onPreExecute()" );
super.onPreExecute();
}
@Override
protected void onProgressUpdate(Integer... values)
{
super.onProgressUpdate(values);
}
// -- called if the cancel button is pressed
@Override
protected void onCancelled()
{
super.onCancelled();
Log.i( "makemachine", "onCancelled()" );
}
// -- called as soon as doInBackground method completes
// -- notice that the third param gets passed to this method
@Override
protected void onPostExecute( String result )
{
super.onPostExecute(result);
Log.i( "makemachine", "onPostExecute(): " + result );
}
}
}
答案 0 :(得分:2)
试试这样:
private final Handler handler = new Handler() {
public void handleMessage(Message msg) {
if(msg.arg1 == 1){
gridadapter.notifyDataSetChanged();
}
}
};
private class UpdateGridview extends AsyncTask<Context, Integer, String>
{
@Override
protected String doInBackground( Context... params )
{
int i = 0;
while( i <10)
{
try{
// gridadapter.notifyDataSetChanged();
// gridadapter.refreshItems(gridadapter);
//gridview.invalidate();
Message msg = handler.obtainMessage();
msg.arg1 = 1;
handler.sendMessage(msg);
//TableGridViewAdapter.refreshItems(gridadapter);
Thread.sleep( 20000 );
System.out.println("i called notifyDataSetChanged()=======================");
i++;
} catch( Exception e ){
Log.i("makemachine", e.getMessage() );
}
}
return "COMPLETE!";
}
// -- gets called just before thread begins
@Override
protected void onPreExecute()
{
Log.i( "makemachine", "onPreExecute()" );
super.onPreExecute();
}
@Override
protected void onProgressUpdate(Integer... values)
{
super.onProgressUpdate(values);
}
// -- called if the cancel button is pressed
@Override
protected void onCancelled()
{
super.onCancelled();
Log.i( "makemachine", "onCancelled()" );
}
// -- called as soon as doInBackground method completes
// -- notice that the third param gets passed to this method
@Override
protected void onPostExecute( String result )
{
super.onPostExecute(result);
Log.i( "makemachine", "onPostExecute(): " + result );
}
}
}