我在android中实现Expandable List视图,我得到了上面标题的错误.请帮我.
主要活动是 -
package com.expand;
import android.app.Activity;
import android.os.Bundle;
import android.util.DisplayMetrics;
import android.util.Log;
import android.view.View;
import android.widget.ExpandableListView;
import android.widget.Toast;
public class MyExpandableListViewActivity extends Activity {
/** Called when the activity is first created. */
static final String groupElements[]= {
"India",
"Australia",
"England",
"South Africa"
};
static final String[][] childElements=
{
{
"Sachin Tendulkar",
"Raina",
"Dhoni",
"Yuvi"
},
{
"Ponting",
"Adam Gilchrist",
"Michael Clarke"
},
{
"Andrew Strauss",
"kevin Peterson",
"Nasser Hussain"
},
{
"Graeme Smith",
"AB de villiers",
"Jacques …Run Code Online (Sandbox Code Playgroud) 我试图理解这个ListView概念及其工作原理,我正在尝试创建自己的扩展适配器BaseAdapter.对于ArrayAdapter例如,有notifyDataSetChanged()你已经更新了其持有的所有数据数组列表后,为了刷新应该被调用的方法ListView.
但我正在创建自己的子类BaseAdapter.那种方法对我来说不可用,或者是吗?我该如何实现这种方法?基本上,这种方法究竟做了什么,也许我会理解的.
如果ArrayAdapter我猜测它会查看ListView当前显示的位置,并检查它是否与ArrayList更新后的位置相同?要么...
它说的方法:
通知附加的观察者基础数据已被更改,反映数据集的任何视图都应自行刷新.
但它究竟是如何刷新自己的呢?
有人可以解释一下吗?
是否可以知道a Spinner是开放还是关闭?如果有一些onOpenListener for Spinners会更好.
我试过像这样使用OnItemSelectedListener:
spinnerType.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
executeSomething();
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
Log.d("nothing" , "selected");
}
});
Run Code Online (Sandbox Code Playgroud)
我知道如果选择了某些东西,窗口将会关闭(在executeSomething()中).但是如果我在对话框外单击,我也不会收到通知,这也会关闭微调器
这两个听众有什么区别,文件说:
OnItemSelectedListener - 当选择此视图中的项目时要调用的回调的接口定义.
OnItemClickListener - 单击此AdapterView中的项目时要调用的回调的接口定义.
选择,点击这些在触摸屏上是不是相同?
我正在为Android做一个应用程序,我需要的是它显示了SD卡中所有文件和目录的列表,它必须能够在不同的目录中移动.我在anddev找到了一个很好的教程.我修改了一些东西,所以应用程序在SD卡中移动而不是在Android根目录中,但其余部分基本相同.
这是我的活动的xml文件:
<?xml version="1.0" encoding="utf-8"?>
<ListView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@id/android:list"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content" />
</ListView>
Run Code Online (Sandbox Code Playgroud)
这是活动的代码:
import hackreatorz.cifrador.R;
import java.io.File;
import java.util.ArrayList;
import android.app.ListActivity;
import android.content.res.Configuration;
import android.os.Bundle;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.Toast;
public class ArchivosSD extends ListActivity {
private ArrayList<String> directoryEntries = new ArrayList<String>();
private File currentDirectory = new File("/sdcard/");
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
browseToSD();
}
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
}
private void browseToSD() {
browseTo(new …Run Code Online (Sandbox Code Playgroud) 我在使用setEmptyView方法时遇到了麻烦.我尝试在GridView和ListView中实现它,但它们都没有用.这是一个示例代码块:
networkGames = (GridView) baseLayer.findViewById(R.id.all_game_grid_network);
networkGames.setBackgroundResource(R.drawable.game_border);
networkGames.setSelector(R.drawable.game_active_border);
networkGames.setOnItemClickListener(new NetworkGameListener());
networkGames.setEmptyView(View.inflate(baseLayer, R.drawable.no_network_games, null));
networkGames.setAdapter(new NetworkAdapter());
Run Code Online (Sandbox Code Playgroud)
网络适配器不包含任何项目:
private class NetworkAdapter extends BaseAdapter {
/* (non-Javadoc)
* @see android.widget.Adapter#getCount()
*/
@Override
public int getCount() {
return 0;
}
/* (non-Javadoc)
* @see android.widget.Adapter#getItem(int)
*/
@Override
public Object getItem(int position) {
return null;
}
/* (non-Javadoc)
* @see android.widget.Adapter#getItemId(int)
*/
@Override
public long getItemId(int position) {
return 0;
}
/* (non-Javadoc)
* @see android.widget.Adapter#getView(int, android.view.View, android.view.ViewGroup)
*/
@Override
public View getView(int position, View convertView, …Run Code Online (Sandbox Code Playgroud) 我想写一个ListView基本格式,但我收到一个错误:
UnsupportedOperationException: addView(View, LayoutParams) is not supported in AdapterView
Run Code Online (Sandbox Code Playgroud)
和:
androidview.LayoutInfalater.inflate(LayoutInflater.java: some numbers....like 720,658...so on)
Run Code Online (Sandbox Code Playgroud)
我知道应该在适配器类中完成一些事情:
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
RelativeLayout rv = new RelativeLayout(c);
TextView tv = new TextView(c);
TextView tv1 = new TextView(c);
ImageView imgv = new ImageView(c);
tv.setText(s[position]);
tv1.setText(i[position]);
imgv.setImageResource(d[position]);
rv.addView(tv);
rv.addView(tv1);
rv.addView(imgv);
return rv;
}
Run Code Online (Sandbox Code Playgroud)
我该怎么做才能解决问题
LOGCAT:
02-20 16:40:24.967: E/Trace(1715): error opening trace file: No such file or directory (2)
02-20 16:40:25.819: W/ResourceType(1715): No …Run Code Online (Sandbox Code Playgroud) GridView是一个扩展 AdapterView的类,这意味着它可以有效地显示网格样式的单元格,并在用户滚动时回收旧视图以显示为新视图.
有时,您希望获得一个特殊的UI,它类似于Windows Phone Tiles UI,具有不同大小的单元格.
像这样的东西:
AABB
AACC
AADD
AADD
Run Code Online (Sandbox Code Playgroud)
每个字母代表其细胞的一部分,因此细胞A是2x4,细胞B和细胞C各占2x1,细胞D是2x2.
它可能甚至更多,其中单元格D比我所示的稍微高一点,并且在它下方有另一个单元格,因此D的末端和A的末尾不必对齐.
具有这种风格的应用程序的一个例子是pinterest.
GridView不允许这样的事情.
事实上,我尝试的每个解决方案都有问题.想问一下是否有其他替代品或更好的解决方案.
有多种方法可以解决此问题:
作为扩展AdapterView 的类,GridView可以为每个项目设置一个类型(使用BaseAdapter),这将允许您设置如何布局单元格.
但是,它仍会限制你,因为你会得到一排物品,一个在另一个之下.你必须让它们对齐.
GridLayout是一个相对较新的布局,它非常灵活.谷歌为它发布了一个很好的兼容性库,支持API7及更高版本.
但是,它不使用任何视图的回收,因此如果您希望显示大量项目,这是一个糟糕的选择.
如果您有很多项目,则需要为它们创建所有视图.
QuiltView库 - 从GridLayout扩展,所以基本上有类似的问题.
StaggeredGridView - 看起来最有前途,但有很多错误,特别是在改变方向时.这样的错误包括空单元格,坏滚动和NPE(罕见但仍然发生).我也不确定它是否支持单独使用自定义单元而不是imageView.
其他解决方案,如此处所述.
有谁知道这个问题的另一种替代方案?对于我展示的任何解决方案,可能有一些解决方法吗?
编辑:我认为关于StaggeredGridView,滚动和异常可以通过使用在getView中设置其大小的普通ImageView来解决.我认为它以一种奇怪的方式工作的原因是样本在从互联网加载后更新了imageview的大小.
但是,空单元格问题仍然存在于此库中.不仅如此,即使不改变方向,它们的尺寸也会发生很大变化.
编辑:目前,我认为最好的解决方案是使用 PinterestLikeAdapterView库.
它没有我能找到的任何问题.
但是,它不能使项目占用超过1个单元格宽度.尽管如此,这还是非常好的.
编辑:遗憾的是它与notifyDataSetChanged有问题.我在这里报道了这件事.
android cells android-gridview android-adapterview android-gridlayout
文件说:
当布局的内容是动态的或未预先确定的时,您可以使用子类AdapterView在运行时使用视图填充布局的布局.AdapterView类的子类使用适配器将数据绑定到其布局.
但大多数教程是关于ListView,GridView,Spinner和Gallery.
我正在寻找直接扩展子类AdapterView.我必须创建一个自定义视图,它的内容依赖于适配器.
我该怎么做,以及必须覆盖哪些方法?
gridview.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
Toast.makeText(HelloGridView.this, "" + position, Toast.LENGTH_SHORT).show();
}
});
Run Code Online (Sandbox Code Playgroud)