- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
当我使用 BaseAdapter
的 ListView 离开屏幕时,每一行不再保持连续的位置。除了这个我不知道还能怎么解释。
如果我的 BA/LV 在屏幕上显示 4 个项目,并且我添加了一个显示每一行的 TextView 的 View ,它会显示 0、1、2、3 作为行号(这是正确的)。但是,一旦我将列表向下滚动到底部的 4 项(第 5-8 项),它就会显示为 4、5、0、1?为什么?
编辑:我确实发现如果我改变
rv = (RowView)convertView
;
到
rv = new RowView(mContext,(cursor.getString(2)),
(cursor.getString(5)),
cursor.getString(cursor.getColumnIndex(DBHelper.KEY_IMAGEFILENAME)),
cursor.getString(cursor.getColumnIndex(DBHelper.KEY_CITY)),position);
它可以工作,但它不会重复使用代码。所以,我想我走在正确的轨道上。我确实尝试了一些方便的方法,但这对我没有太大帮助,因为我需要在构造函数启动之前设置这些值。我是否需要创建一个新方法并在最后触发它?比如addRow
方法?这也会导致它滚动得非常慢。
@Override
public void onCreate(Bundle bundle)
{
super.onCreate(bundle);
//setContentView(R.layout.findlist);
//getListView().setEmptyView(findViewById(R.id.empty));
mDbHelper = new DBHelper(this);
mDbHelper.open();
cursor = mDbHelper.fetchAllLocations();
startManagingCursor(cursor);
mAdapter = new myListAdapter(this);
setListAdapter(mAdapter);
}
public class myListAdapter extends BaseAdapter {
public String testing;
public myListAdapter(Context c) {
mContext = c;
// TODO Auto-generated constructor stub
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return cursor.getCount();
}
@Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return position;
}
@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
cursor.moveToPosition(position);
RowView rv;
if (convertView == null) {
rv = new RowView(mContext,(cursor.getString(2)),
(cursor.getString(5)),
cursor.getString(cursor.getColumnIndex(DBHelper.KEY_IMAGEFILENAME)),
cursor.getString(cursor.getColumnIndex(DBHelper.KEY_CITY)),position);
} else {
rv = (RowView) convertView;
try {
// I KNOW THIS SECTION IS NOT RIGHT, BUT I HAVE BEEN MESSING IN HERE
rv.setAddress(cursor.getString(2));
rv.setCity(cursor.getString(5));
rv.setFocusable(true);
rv.setClickable(true); }
catch (Exception e) {
rv = (RowView) convertView;
rv.setAddress(cursor.getString(2));
rv.setCity(cursor.getString(5));
rv.setFocusable(true);
rv.setClickable(true);
Toast mToast;
mToast = Toast.makeText(FindList.this, "Error :" + e.toString() ,
Toast.LENGTH_LONG);
mToast.show();
}
}
return rv;
}
public void addItems() {
//String[] from = new String[] { DBHelper.KEY_BUSINESSNAME, DBHelper.KEY_ADDRESS, DBHelper.KEY_CITY, DBHelper.KEY_GPSLONG, DBHelper.KEY_GPSLAT, DBHelper.KEY_IMAGEFILENAME + ""};
// create array of values of widgits
//to = new int[] { R.id.businessname, R.id.address, R.id.city, R.id.gpslong, R.id.gpslat, R.id.preview};
// Now create an array adapter and set it to display using our row from notes_row.xml
}
}
private class RowView extends LinearLayout {
private TextView mAddress;
private TextView mCity;
public ImageView mArrow;
public ImageView mPicture;
public String mPathName;
public String mDateTime;
public RowView(Context context, String title, String words, String pathName, String city, int position) {
super(context);
this.setOrientation(HORIZONTAL);
this.setVerticalGravity(16); //CENTER_VERTICAL
// Here we build the child views in code. They could also have
// been specified in an XML file.
//DISPLAY DELETE BUTTON
Button mButton = new Button(context);
mButton.setFocusable(false);
mButton.setId(position);
mButton.setBackgroundResource(R.drawable.delete3);
addView(mButton, new LinearLayout.LayoutParams(
LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
TextView mTitle;
mTitle = new TextView(context);
mTitle.setText(Integer.toString(position));
addView(mTitle, new LinearLayout.LayoutParams(
LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
this.setOrientation(HORIZONTAL);
try {
Bitmap bm = Bitmap.createScaledBitmap(BitmapFactory.decodeFile(cursor.getString(cursor.getColumnIndex(DBHelper.KEY_IMAGEFILENAME))),100, 100, true);
mPicture = new ImageView(context);
mPicture.setImageBitmap(bm);
} catch (Exception e) {
mPicture = new ImageView(context);
mPicture.setImageResource(R.drawable.noimage);
}
addView(mPicture, new LinearLayout.LayoutParams(
LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
mArrow = new ImageView(context);
mArrow.setBackgroundResource(R.drawable.arrowleft3);
addView(mArrow, new LinearLayout.LayoutParams(
LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
currentPosition = position;
Button button = (Button)findViewById(position);
button.setOnClickListener(mCorkyListener);
}
最佳答案
当使用 convertView 时,您会得到一个以前使用过但不再显示的 View 。您应该注意用当前项目的值重置其所有属性。否则,您在 RowView 构造函数中设置的所有值将与您第一次创建该 View 时赋予它的值保持一致。
为了更好地理解 ListViews,您必须了解它只使用一组有限的 RowViews,只是足以填充显示的数量,还有一些将在必须显示它们之前填充您的数据。
关于Android BaseAdapter : position not really the position?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/552247/
好的,我一直在仔细搜索,但我在实现 BaseAdapter 时遇到了一些问题。 我已经能够实现一个简单的游标适配器 http://developer.android.com/resources/sam
我将使用下面的代码从服务器(URL)加载适配器的图像。它适用于新型移动设备。但是,旧模型会崩溃并返回“java.lang.OutOfMemoryError”。它将把 A 行或 B 行标记为错误。如何避
已关闭。此问题需要 debugging details 。目前不接受答案。 编辑问题以包含 desired behavior, a specific problem or error, and the
我想在 ListView 中显示具有多列的数组。 调用 View.getView() 时出现此错误: android.widget.linerlayout cannot be cast to andr
嗨,我已经扩展了 BaseAdapter,我的列表大小是 20,但它只显示了 7 条记录,在第 7 条记录之后它又从 0 开始显示。 公共(public)类 ContactsAdapter 扩展 Ba
大家 最近在用ADT开发android 2.2的程序。程序在模拟器上运行正常,但在真机上运行却遇到了一个奇怪的问题。 我使用 BaseAdapter 创建一个 MenuAdapter,它将加载名为 V
这是我的自定义 BaseAdapter 的构造函数 public MyAdapterAds(Activity activity, BaseAdapter delegate) { this.ac
我有一个像这样的 JSON 数组:[{"usename":"user", "user_pic":"picture", "photo":"http://hfhfhfhhfh.jpg", "timesta
嗨,我是这个机器人的新手。我只是对基本适配器感到困惑。我的问题是考虑在一个数组中我有 10 个项目(从 0 到 9)。在 baseadapter 的 getview() 选项中,我在 textview
有没有办法通过 getApplicationContext() 获取 BaseAdapter 类中的 context? 我需要这个,因为我要从 url 加载图像。我在这里使用 context: 这是在
我有一个 ListView,它扩展了 BaseAdapter。我有一个数据 [] 数组。 ListView 正确膨胀和填充。我想要做的是在用户选择项目时以及是否选择了上一个项目时,使 ImageVie
无论如何,我正在努力制作的应用程序都有一个简单的列表和一个位于底部的按钮。我的问题是我的自定义 BaseAdapter 不显示元素。我知道,因为我的元素只是一个字符串,所以我可以使用 ArrayAda
我正在尝试将一个整数数组传递给一个 baseadapter,这样 A.class 就会将一个整数数组传递给 B.class 中的 BaseAdapter。以下是我在 A.Class(发件人)中传递整数
我在运行刚从 ADT(Eclipse) 转换而来的 android 项目时遇到此错误。 找到一个话题 here但没有回答。谁有解决办法? 最佳答案 这是解决方法。 类 XXXAdapter 扩展了 a
我正在使用 Android Studio 创建 Android 应用程序。我在使用自定义 SimpleAdapter 的 Activity 中有 ListView 。我需要在自定义适配器中使用自定义字
我使用了 ListView 。我有 5 件元素。当我启动程序时,我只看到 3. 处理程序,用于进度条开始处理 3/5 项目。我去看 4,5 项,所以我从 View 1,2 项中丢失了。 4 和 5 项
我有一个自定义BaseAdapter对于我的ListView我在其中实现 AdapterView.OnItemClickListener . 问题是onItemClick(AdapterView, V
在我的应用程序中,我遇到了与 here 相同的错误或here但是,建议的清理 Eclipse 项目的解决方案对我不起作用。具体来说,我有一个自定义 ListView 适配器,它尝试从其布局文件加载两个
我有一个 ListView 和一个将值附加到 View 的 Baseadapter 类。适配器类看到除一个之外的所有变量..我不知道该变量是否超出了类的范围..我已经检查过,但似乎找不到问题出在哪里
我刚刚构建了一个扩展 BaseAdapter 的新类。我相信我已经正确设置了所有内容,但是,当我尝试在 fragment 内设置适配器时,我想使用它,但出现以下错误: 构造函数 HomeBase(Ho
我是一名优秀的程序员,十分优秀!