Articles of android adapter

在FragmentPageAdapter的中间插入页面

我正在使用ViewPageIndicator中的ViewPager ,我需要能够在其他人的中间 动态插入一个片段。 我试图用FragmentPagerAdapter和FragmentStatePagerAdapter (都来自v4支持代码)管理模型,第一个似乎不管理中间插入页面的任何方式。 第二个只有当我做一个天真的getItemPosition实现返回总是POSITION_NONE但这会导致每次刷卡时完全重新创建页面。 我用FragmentStatePagerAdapter(FSP)观察到的问题是这样的: 我从两页开始[A] [B] 然后我在中间插入[C] [A] [C] [B]。 插入后我调用notifyDataSetchange() 然后FSP为[A]调用getItemPosition并获得0 然后FSP为[B]调用geTItemPosition并得到2.它说……哦,我要销毁[B]并制作mFragments.set(2,null)然后因为它只有两个元素在mFragments数组中它会抛出IndexOutOfBoundsException 看了一下代码之后,似乎提供的fragmentStatePagerAdapter不支持插入中间。 这是正确的还是我错过了什么? 更新:适配器中的插入是以逻辑方式进行的,当某个编码为真时,页面会增加1。 片段创建是使用getItem()中的构造函数以这种方式完成的: void setCondition(boolean condition) { this.condition=condition; notifyDataSetChanged(); } public int getCount(){ return condition?3:2; } public Fragment getItem(int position) { if(position==0) return new A(); else if(position==1) return condition?new C():new B(); else if(position==2 && condition) return new B(); […]

是否可以将TableLayout与ArrayAdapter绑定?

是否可以将TableLayout与ArrayAdapter绑定?

CursorAdapter bindView优化

当重写ArrayAdapter我知道使用这样的模式是正确的: if(view != null){ …create new view setting fields from data }else return view; //reuse view 使用CursorAdapters的这种模式也是正确的吗? 我的问题是我有一个根据光标字段可以是红色或蓝色的文本颜色,所以我不希望在具有需要蓝色字段的单元格上出现红色等错误。 我的bindView代码是这样的: if(c.getString(2).equals(“red”)) textView.setTextColor(); else textView.setTextColor(); 如果我重复使用视图,我可以确定红色是红色,而蓝色是蓝色吗?

Listview没有填充,getView()没有被调用

我有一些问题让我的listview显示在我正在编写的简单应用程序中。 由于某种原因,我的适配器类的getView()方法没有被调用。 但是,当在我的适配器类中调用getCount()时,它不返回0但实际上返回了正确的值。 我真的很困惑为什么这不起作用。 这是我的活动: import android.app.Activity; import android.os.Bundle; import android.widget.ListView; public class CardListActivity extends Activity { protected ListView lv; protected int nCards = 12; protected String[] cardList = new String[nCards]; public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.cardlist); this.loadCardStrings(); lv = (ListView) findViewById(R.id.CardList_ListView); EditorListAdapter adapter = new EditorListAdapter(this, this.cardList); lv.setAdapter(adapter); } protected void loadCardStrings(){ cardList […]

使用AsyncTask在ListView中加载图像

我有一个可以容纳图像的ListView。 这取决于SDCARD中是否存在图像。 这是我的示例代码: public class MainActivity extends Activity { ListView mListView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); mListView = new ListView(this); setContentView(mListView); String[] arr = new String[] { “/example/images/1.jpg”, “/example/images/2.jpg”, “/example/images/3.jpg”, “/example/images/4.jpg”, “/example/images/5.jpg”, “/example/images/6.jpg”, “/example/images/7.jpg”, “/example/images/8.jpg”, “/example/images/9.jpg”, “/example/images/1.jpg”, “/example/images/2.jpg”, “/example/images/3.jpg”, “/example/images/4.jpg”, “/example/images/5.jpg”, “/example/images/6.jpg”, “/example/images/7.jpg”, “/example/images/8.jpg”, “/example/images/9.jpg”, “/example/images/1.jpg”, “/example/images/2.jpg”, “/example/images/3.jpg”, “/example/images/4.jpg”, “/example/images/5.jpg”, “/example/images/6.jpg”, “/example/images/7.jpg”, “/example/images/8.jpg”, […]

android notifyItemRangeInserted禁用自动滚动

我使用RecyclerView作为我的数据列表的基础。 我已经实现了基于ArraList的自定义RecyclerView.Adapter。 从互联网上获取数据我正在运行的代码是: public void addItems(List items){ final int size = data.size(); data.addAll(items); notifyItemRangeInserted(size, items.size()); } 问题是,在运行此代码后,我将自动滚动到列表的底部(最后一个元素现在可见) 有没有办法禁用它? 找不到任何类似的问题。 相关信息:我的适配器有2个viewHolders – 对于位置0,它有一个视图(使用viewType 0),对于其余的列表,它有viewType 1的视图 谢谢你的帮助! 罗伊

在使用RecyclerView时,notifydatasetchanged调用onCreateViewHolder

我想使用切换来在两个不同的视图之间切换,但使用相同的RecyclerView 。 基本上,一旦你切换,我希望RecyclerView适配器调用onCreateViewHolder()但这次它将使用不同的布局项文件。 notifydatasetchanged()会导致适配器重建吗? 或者还有另一种方式吗?

Android数据绑定:RecyclerView适配器的可观察列表

通过使用新数据绑定库和MVVM模式中的ObservableList类来避免使用Adapter类中的”notifyItem(s)…”方法,它们是一种方法吗? 或者如果不是,将ObservableList绑定到RecyclerView最简单方法是什么? 感谢任何线索!

Android:自定义列表视图中的单选按钮

我正在开发一个应用程序,我需要在列表视图中实现单选按钮。 我想实现一个列表视图,每行有一个单选按钮和两个文本视图。 列表视图下方有一个“确定”按钮。 我所做的是创建了一个列表视图和一个自定义适配器。 listview的代码如下: 我创建了一个自定义适配器布局: 片段的java代码如下: ListView listView = (ListView) view.findViewById(R.id.listview); // values is a StringArray holding some string values. CustomAdapter customAdapter = new CustomAdapter (getActivity(), values); listView.setAdapter(customAdapter ); listView.setOnItemClickListener(this); @Override public void onItemClick(AdapterView arg0, View arg1, int position, long arg3) {} 适配器的代码如下: public class CustomAdapter extends ArrayAdapter { /** Global declaration of variables. […]

ArrayAdapter的getView()方法的说明

你能解释一下ArrayAdapter的getView()方法吗? 我阅读了文档,它有三个参数: position :项目在我们想要的视图的项目的适配器数据集中的位置。 convertView :如果可能的话,重用旧视图。 注意:在使用之前,您应该检查此视图是否为非null且具有适当的types。 如果无法转换此视图以显示正确的数据,则此方法可以创建新视图。 异构列表可以指定其视图types的数量,以便此View始终是正确的types(请参阅getViewTypeCount()和getItemViewType(int))。 parent :此视图最终将附加到的父级 我理解position参数。 就像他们说的那样,这意味着该项目的位置,已经请求了视图。 convertView来自哪里。 我见过很多例子,他们检查convertView是否为null。 如果is为null,则会为行布局的新实例充气,填充并返回它。 我想我也已经知道了这一点,但还有一件事让我感到困惑。 通过convertViewparameter passing的布局是什么。 是否在初始化ArrayAdapter时传入的resource参数 ? 是getView()返回的最后一个布局的缓存副本? 最后。 parent参数的作用是什么。 我没有看到太多利用它的例子。 他们中的大多数只是重复/膨胀行布局并返回它。 (我问,因为我的ListView有一个点击animation。特别是这个旨在复制Spotify的下拉快速操作菜单 。我的animation有点迟钝。在诊断了这个问题一段时间之后,我意识到这是因为我的getView()方法需要花费一些时间才能完成,因为我在每次迭代中都在为一个新的行布局进行膨胀。有人建议在ViewHolder缓存行布局,而其他示例则指向重用convertView参数,即如果convertView为null,则仅对行布局进行膨胀。)