gpt4 book ai didi

android - 如何使用 Android Invalidate()

转载 作者:太空狗 更新时间:2023-10-29 16:22:59 25 4
gpt4 key购买 nike

在我的主要 Activity 中,我定义了两个 View 和一个菜单:

观点:1.自定义 View 游戏2.按钮btn

菜单:1. Open item 用于打开文件

菜单布局在不同的 Activity 中定义

基本上,当主要 Activity 开始时,它会绘制没有任何内容的自定义 View 和按钮。然后我使用菜单中的打开加载文件。它在/sdcard 目录中显示文件列表,我从列表中选择文件。然后 onListItemClick() 解析文件并更新自定义 View 中的数据结构。然后我按返回键返回主要 Activity 。现在我希望在按下按钮后看到重绘,但它似乎什么也没做。我已经为按钮实现了 OnClickListener() 并调用了 game.invalidate()。但它似乎并没有在单击按钮后立即重绘自定义 View 。我必须退出应用程序(后退按钮),然后重新打开应用程序才能看到重绘。我读过其他关于 invalidate() 不立即重绘 View 的帖子。它只会将其插入队列,Android 会在空闲时采取行动。我想我不明白的是我的应用程序中的内容阻止 Android 采取行动。

代码 fragment

//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

}

最佳答案

关于android - 如何使用 Android Invalidate(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9759654/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com