Articles of android adapter

自定义列表项不响应选择器中的state_checked

我首先要说的是,我已经详细阅读了关于SO的每个问题,我可以find与自定义可检查列表项和选择器相关的问题。 他们中的许多人都有类似的问题,但没有一个答案可以解决我的问题。 在我的应用程序中的一点,我提出了一个自定义列表活动。 创建时,它从调用它的intent中检索一组静态数据,并将该数据传递给它的自定义数组适配器。 每个列表项都是一个简单的RelativeLayout,它实现了Checkable接口。 默认情况下,如果单击其中一个项目,则会显示一个新活动,其中显示有关所选联系人的详细信息。 但是,如果长按列表中的项目,则会启动ActionMode。 此时单击列表中的项目不会显示详细信息活动,它只是将项目设置为选中。 然后,如果用户选择一个动作模式项,则它对被检查的项执行动作。 需要了解的一点是,在两个选择“模式”中,单击列表项会将其设置为选中状态。 我上面描述的所有内容都非常有效。 我唯一的问题与列表项的背景有关,当它们被设置为选中时,即使使用默认选择器也没有突出显示。 我想要做的是有两个选择器:每个选择模式一个。 在第一种情况下,检查项目时背景不会改变,而在第二种情况下,背景不会改变。 我尝试过实现自定义选择器,但即使在那些state_checked中也会被忽略! 选择器的其他部分工作正常,但不是state_checked。 我对CheckableListItem的实现结合了很多不同的例子,所以如果我做错了,或者有更好的方法让我知道! 注意 :有趣的一点是,如果我将results_list_item.xml中列表项的背景设置为我的选择器,而不是ListView的listSelector属性,则在选中项时会更改背景。 但是,这样做会导致我的选择器中的长按转换不起作用。 ResultsActivity.java : public class ResultsActivity extends ListActivity implements OnItemLongClickListener { private ListView listView; // Reference to the list belonging to this activity private ActionMode mActionMode; // Reference to the action mode that can be started […]

ViewPager片段娱乐,恢复但不可见

我有一个ViewPager + FragmentPageAdapter的问题。 场景:我在片段A中有一个活动。片段A有一个带有片段B1和片段B2的ViewPager。 B1 e B2是相同的类,但不同的数据作为参数。 问题:创建时一切都很好。 但是当应用程序进入后台并且进程被android杀死时,尝试恢复最后状态,再次启动应用程序,片段B1 e B2在前景中不可见,而片段A是。 有点奇怪的是,片段B1和B2在片段A的ChildFragmentManager中,并且由于onStart()和onResume()被调用(由Log看到)而被恢复。 此外,寻呼机恢复两页,但空或更好,没有任何可见。 如果我很清楚FragmentPagerAdapter是如何工作的,那么它应该负责管理自己的片段以及如何重新创建片段。 此外,为了强制执行这一点,如果已经存在具有指定标记的该位置的片段,则FragmentPagerAdapter在从后台返回时不会调用getItem(int position)。 …那么为什么我看不到Fragment B1 e B2,只有传呼机空了? 这是我的示例代码。 FragmentA @Override public void onStart() { super.onStart(); populateViewPager(); } private void populateViewPager() { pager.setAdapter(new MyFragmentPageAdapter(getChildFragmentManager())); indicator.setViewPager(pager); indicator.notifyDataSetChanged(); } FragmentPagerAdapter public class MyFragmentPageAdapter extends FragmentPagerAdapter { public MyFragmentPageAdapter(FragmentManager fm) { super(fm); } @Override public Fragment […]

从tablayout,android获取标签或id的片段

我使用本教程创建选项卡。 现在我在每个片段中都有一个recyclerview,我想从mainactivity通知他们。 如何访问片段中的适配器? 我用它来调用片段中的refreshData()方法: TabFragment1 tabFragment = (TabFragment1) getSupportFragmentManager().findFragmentByTag(TabFragment1.class.getSimpleName()); if (tabFragment != null) { tabFragment.refreshData(); } 但是返回null。 主要活动: TabLayout tabLayout = (TabLayout) findViewById(R.id.tabLayout); tabLayout.addTab(tabLayout.newTab().setText(“Tab1”)); tabLayout.addTab(tabLayout.newTab().setText(“Tab2”)); final PagerAdapter adapter = new PagerAdapter (getSupportFragmentManager(), tabLayout.getTabCount()); viewPager.setAdapter(adapter); viewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tabLayout)); tabLayout.setOnTabSelectedListener(new TabLayout.OnTabSelectedListener() { @Override public void onTabSelected(TabLayout.Tab tab) { viewPager.setCurrentItem(tab.getPosition()); } @Override public void onTabUnselected(TabLayout.Tab tab) { } @Override […]

没有连接适配器; 跳过布局

logcat错误:没有连接适配器; 跳过布局 我用getActivity()更改了context参数,但应用程序仍未运行。 public class FragmentActivity extends Fragment { private RecyclerView mRecyclerView; private CountryAdapter mAdapter; private LinearLayoutManager layoutManager; public FragmentActivity(){} @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View rootView = inflater.inflate(R.layout.activity_main, container, false); mRecyclerView = (RecyclerView) rootView.findViewById(R.id.list); layoutManager = new LinearLayoutManager(getActivity()); mRecyclerView.setLayoutManager(layoutManager); mRecyclerView.setAdapter(mAdapter); mAdapter = new CountryAdapter(CountryManager.getInstance().getCountries(), R.layout.card_layout, getActivity()); return rootView; } […]

不调用自定义适配器getview

我有一个带有ListFragment的自定义适配器 ,但根本没有调用适配器getView() 。 这是适配器的样子 – public class ModuleListItemAdapter extends BaseAdapter { List list; Context context; Module mod; public ModuleListItemAdapter() { super(); // TODO Auto-generated constructor stub } public ModuleListItemAdapter(Context context, List list, Module mod) { super(); this.list = list; this.context = context; this.mod = mod; // TODO Auto-generated constructor stub } @Override public View getView(int […]

RecyclerView:在创建视图后立即查找最后一个可见项目

我遇到以下方法的问题: int firstVisibleItemPosition = gridLayoutManager.findFirstVisibleItemPosition(); int lastVisibleItemPosition = gridLayoutManager.findLastVisibleItemPosition(); 我的目标:保存用户查看过的项目的分析数据。 为了做到这一点,我在两种不同的场景中调用这些方法: 每次滚动都转到“空闲”状态,并检查可见项目是什么。 在那种情况下,我得到了预期的索引。 当RecyclerView变得对用户“可见”时。 现在就是问题开始的时候。 我希望当包含recylcerView的片段传递给onResume()调用findLastVisibleItemPosition()将返回可见项。 但在这种情况下,它返回-1。 我想它与RecyclerView +适配器内部项初始化相对于片段/活动生命周期的异步加载有关。 通过将此代码推迟几毫秒 – findLastVisibleItemPosition()返回正确的索引。 但我不想推迟使用处理程序+延迟runnable进行硬编码,因为调度延迟runnable是我真正想要做的解决办法:检测回收器视图何时完成充气并将所有视图绘制到屏幕上脚里面.. 所以我的问题基本上是: 如何检测RecyclerView何时完成所有初始化/测量/充气并将其绘制到屏幕上的子项? (在任何用户交互之前……)。 有没有可靠的良好实践方法来确切知道回收者视图中的哪些项目真正显示在屏幕上?

将项添加到ListView而不重新加载

我想知道是否有办法将项目添加到ListView而不会导致重新加载整个列表。 我有一个BaseAdapter派生的ListView适配器,当底层模型添加一个新元素时,它调用notifyDataSetChanged(),它触发ListView重新加载。 列表中的元素具有图像,这些图像根据元素的内容动态加载。 问题是,当在重新加载期间调用getView()时,为了重用而传递的convertView参数之前来自不同的位置,因此必须重新加载图像,这会导致相当难看的闪烁。 如果我只在最后添加一个项目(这将是添加新项目的唯一方法),那么有没有办法不重新加载整个列表? 或者至少以某种方式将单元重用于相同的位置(如果可能),以避免代价高昂的图像重新加载?

Android的ArrayAdapter – 添加字符串listview而不是replace

这就是我向listview添加数组的方法: ListView my_listview = (ListView)findViewById(R.id.listView1); ArrayAdapter adapter = new ArrayAdapter(this, android.R.layout.simple_list_item_1, my_array); my_listview.setAdapter(adapter); my_array是一个文件的uri。 它运作良好。 但是接下来我想要对一个新arrays进行排列,那么我不想用新的arrays替换,而是将新的arrays添加到现有的arrays中。 我怎么能做到这一点?

如何使用通用图像加载器

我有一个要求,我需要加载缩略图和ListView中的Text ,由自定义Adapter设置。 缩略图应该存储在缓存中,因为我使用的是通用图像加载器,但我对它的实现非常困惑,以及如何根据我的要求使用它从URL加载ListView的图像。 请通过良好的实施建议我一些方法。

Android – 将搜索filter实施到RecyclerView

我需要在我的RecyclerView上实现基于EditText的搜索function,列表必须在typng时进行过滤 这是代码: DisplayAdapter.java这是适配器 public class DisplayAdapter extends RecyclerView.Adapter{ private List displayedList; public class MyViewHolder extends RecyclerView.ViewHolder{ public TextView english_d; public MyViewHolder(View view){ super(view); english_d = (TextView) view.findViewById(R.id.engword); } } public DisplayAdapter(List displayedList){ this.displayedList = displayedList; } @Override public MyViewHolder onCreateViewHolder(ViewGroup parent, int position) { // create a layout View itemView = LayoutInflater.from(parent.getContext()).inflate(R.layout.list_item, parent, false); return […]