我正在使用一些代码从网站上获取封面流,
http://www.inter-fuser.com/2010/01/android-coverflow-widget.html
这个封面流程很好,没有任何问题。然而,当我试图把它放在xml布局中时,它不会显示出来,只有封面流的黑色背景壁纸出现了,但是缺少封面。
我想把它放在xml布局中的原因是因为需要在页面底部放置按钮。所以我决定在封面流下方的屏幕下方制作一个带有按钮的xml布局。
出现了什么问题,或者我错过了什么使得封面流程无法在xml布局中运行?
我的代码中可能缺少一些可供使用的内容。我做了以下事情尝试让它工作。代码作者使它看起来像你要做的就是使用包含的示例代码来设置内容视图。并在布局中创建一个简单的xml文件,它应该可以工作。
我不明白为什么封面流程本身运行良好,并且当放置在布局内部时不起作用。
是否有一个检查清单,列出了这样的事情需要做的事情?
封面流程代码的作者添加了两个注释掉的行作为可以在您创建自己的cusom xml视图时使用的示例
//Use this if you want to use XML layout file
//setContentView(R.layout.main);
//coverFlow = (CoverFlow) findViewById(R.id.coverflow);
我删除了这些行的注释,以便我可以使用它们。
接下来,我将以下代码添加到xml布局
<com.vagina.destruction.CoverFlow
android:id="@+id/coverflow"
android:layout_width="wrap_content"
android:layout_height="wrap_content" >
</com.vagina.destruction.CoverFlow>
这是我从eclipse中的可视布局编辑器中获取的错误消息
无法实例化以下类: - com.vagina.destructon.CoverFlow(Open Class,Show Error Log) - com.vagina.destruction.CoverFlowExample(Open Class,Show Error Log) 有关详细信息,请参阅错误日志(窗口&gt;显示视图)。 提示:在Eclipse中显示时,在自定义视图中使用View.isInEditMode()来跳过代码
以下是封面流程示例活动
开头的代码部分 public class CoverFlowExample extends Activity implements OnItemClickListener {
/** Called when the activity is first created. */
int imageCount = 0;
Cursor cur;
String toastResult;
String pathName;
ArrayList<String> list1 = new ArrayList<String>();
private int blocker = 0;
private int imagePosition;
private int pathIndex;
private int indexer;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
CoverFlow coverFlow;
coverFlow = new CoverFlow(this);
Bundle extras = getIntent().getExtras();
if(extras !=null) {
imagePosition = extras.getInt("imagePosition");
}
String[] proj2 = {MediaStore.Images.Media.DATA};
Cursor cur2 = getContentResolver().query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, proj2, MediaStore.Images.Media.IS_PRIVATE + "='" + 1 +"'", null, null);
imageCount = cur2.getCount();
cur2.close();
coverFlow.setAdapter(new ImageAdapter(this));
ImageAdapter coverImageAdapter = new ImageAdapter(this);
coverFlow.setAdapter(coverImageAdapter);
coverFlow.setSpacing(-10);
coverFlow.setSelection(imageCount, true);
// setContentView(coverFlow);
coverFlow.setOnItemClickListener(this);
coverFlow.setSelection(imagePosition);
coverFlow = (CoverFlow) findViewById(R.id.coverflow);
//Use this if you want to use XML layout file
setContentView(R.layout.activity_coverflow);
coverFlow = (CoverFlow) findViewById(R.id.coverflow);
// centers the image on coverflow to the same image selected in the previous activity
coverFlow.setBackgroundResource(R.drawable.blanklarge);
答案 0 :(得分:3)
使用此
public class CoverFlowExample extends Activity implements OnItemClickListener {
/** Called when the activity is first created. */
int imageCount = 0;
Cursor cur;
String toastResult;
String pathName;
ArrayList<String> list1 = new ArrayList<String>();
private int blocker = 0;
private int imagePosition;
private int pathIndex;
private int indexer;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//Use this if you want to use XML layout file
setContentView(R.layout.activity_coverflow);
CoverFlow coverFlow;
coverFlow = (CoverFlow) findViewById(R.id.coverflow);
/* CoverFlow coverFlow;
coverFlow = new CoverFlow(this); */
Bundle extras = getIntent().getExtras();
if(extras !=null) {
imagePosition = extras.getInt("imagePosition");
}
String[] proj2 = {MediaStore.Images.Media.DATA};
Cursor cur2 = getContentResolver().query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, proj2, MediaStore.Images.Media.IS_PRIVATE + "='" + 1 +"'", null, null);
imageCount = cur2.getCount();
cur2.close();
coverFlow.setAdapter(new ImageAdapter(this));
ImageAdapter coverImageAdapter = new ImageAdapter(this);
coverFlow.setAdapter(coverImageAdapter);
coverFlow.setSpacing(-10);
coverFlow.setSelection(imageCount, true);
coverFlow.setOnItemClickListener(this);
coverFlow.setSelection(imagePosition);
// centers the image on coverflow to the same image selected in the previous activity
coverFlow.setBackgroundResource(R.drawable.blanklarge);
基本上问题是,一旦你在xml中声明了东西,一旦你使用setCOntentView给它们充气,就会自动创建opbject。您可以使用findViewById获取那些已创建的对象,而无需使用“x = new x()”再次创建它们