在我的主要活動我已經定義了兩個視圖和一個菜單:如何使用Android的Invalidate()
瀏覽: 1.自定義視圖遊戲 2.按鈕BTN
菜單: 1.打開項目打開文件
菜單佈局在不同的活動
基本上,主要活動開始時,它繪製不具有任何自定義視圖,並且按鈕的定義。然後我使用菜單中的打開來加載文件。它調出/ sdcard目錄中的文件列表,並從列表中選擇文件。然後onListItemClick()解析文件並更新自定義視圖中的數據結構。然後我按回來回到主要活動。現在我希望看到按下按鈕後重新繪製,但它似乎沒有做任何事情。我已經實現了按鈕的OnClickListener()並調用game.invalidate()。但它似乎並沒有立即重新繪製自定義視圖按鈕點擊。我必須退出應用程序(後退按鈕),然後重新打開應用程序以查看重繪。我讀過關於invalidate()的其他文章,不立即重畫視圖。它只會將其推送到隊列中,一旦Android可以自由採取行動,Android就會採取行動。我想我不明白的是,在我的應用程序中,讓Android無法採取行動。代碼
//Main Activity
public class someActivity extends Activity {
someView myView;
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
LinearLayout layout = new LinearLayout(this);
layout.setOrientation(LinearLayout.VERTICAL);
Button btn1 = new Button(this);
btn1.setOnClickListener(forward);
myView = new someView(this);
layout.addView(myView);
layout.addView(btn1);
setContentView(layout);
}
@Override
public boolean onCreateOptionsMenu(Menu menu)
{
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.menu, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item)
{
switch (item.getItemId())
{
case R.id.open:
Intent myIntent = new Intent();
myIntent.setClass(this, DirectoryBrowser.class);
startActivityForResult(myIntent,0);
return true;
case R.id.save:
return true;
default:
return super.onOptionsItemSelected(item);
}
}
private OnClickListener forward = new OnClickListener()
{
public void onClick(View v)
{
myView.invalidate();
}
};
//DirectoryBrowser Activity
public class DirectoryBrowser extends ListActivity
{
private List<String> items = null;
@Override
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
setContentView(R.layout.open);
getFiles(new File("/sdcard").listFiles());
}
@Override
protected void onListItemClick(ListView l, View v, int position, long id){
int selectedRow = (int)id;
if(selectedRow == 0){
getFiles(new File("/sdcard").listFiles());
}else{
File file = new File(items.get(selectedRow));
if(file.isDirectory()){
getFiles(file.listFiles());
}else{
try
{
//Parse file and update myView.data
}
catch (FileNotFoundException e)
{
Log.e("ERROR","File Not Found");
}
}
}
}
//Custom View someView
//...
@Override
public void onDraw(Canvas canvas)
{
//Redraw view here
}
您是否得到了解決方案? – ViVekH 2014-08-20 08:59:53