在Internet上find的许多代码示例中, context都是在适配器的构造函数中获得的。 这个上下文被用来让一个inflater在getView方法中膨胀视图。 我的问题是为什么要在构造函数中获取上下文时,可以很容易地获得上下文 LayoutInflater inflater; @Override public View getView(int position, View convertView, ViewGroup parent) { if(inflater == null){ Context context = parent.getContext(); inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); } … … return convertView; } 还有没有什么理由不使用上述方法,因为直到现在我还没有使用它的任何问题。
我正在尝试刷新RecyclerView特定项目。 故事:每当用户点击项目,它显示AlertDialog 。 用户可以通过点击确定button来input一些文字。 我想在这个项目中显示这个文本,并显示不可见的ImageView – 在XML和适配器ViewHolder – 我在AlertDialog Positive Button中使用这个函数来更新这个项目: private void updateListItem(int position) { View view = layoutManager.findViewByPosition(position); ImageView medicineSelected = (ImageView) view.findViewById(R.id.medicine_selected); medicineSelected.setVisibility(View.VISIBLE); TextView orderQuantity = (TextView) view.findViewById(R.id.order_quantity); orderQuantity.setVisibility(View.VISIBLE); orderQuantity.setText(quantity + " packet added!"); medicinesArrayAdapter.notifyItemChanged(position); } 但是这段代码不仅改变了传递位置处的itemView,还改变了其他一些itemView(s)! 点击它应该如何正确更改特定的itemView?
当我不得不使用一个经典的适配器与ListView ,我更新我的数据在这样的ListView: myAdapter.swapArray(data); public swapArray(List<Data> data) { clear(); addAll(data); notifyDataSetChanged(); } 我想知道什么是RecyclerView的最佳做法。 因为在RecyclerView适配器中,您不能像ListView中那样执行clear和addAll 。 所以我尝试了一个notifyDataSetChanged ,但它没有工作。 然后我试着用我的视图swapAdapter: List<Data> data = newData; MyRecyclerAdapter adapter = new MyRecyclerAdapter(data); // swapAdapter on my recyclerView (instead of a .setAdapter like with a classic listView). recyclerViewList.swapAdapter(adapter, false); 但是通过这个最后的解决scheme,我仍然需要创build一个新的适配器实例,我觉得这不是最好的解决scheme。 我应该能够更改我的数据,而不需要新的MyRecyclerAdapter 。
有什么不同? android文档没有关于notifyDataSetInvalidated()的描述。 我想也许你调用该函数来通知所有注册的监听,但使用notifyDataSetChanged()不通知他们?
我想知道在 Android环境中何时 , 何地以及如何使用适配器。 来自Android开发者文档的信息对我来说是不够的,我希望得到更详细的分析。
我的ListView使用BaseAdapter的扩展,我无法正确刷新它。 刷新时,旧数据显示在新数据之上,直到滚动事件发生。 旧行在新行的顶部绘制,但当我开始滚动时,旧行消失。 我曾尝试调用invalidateViews() , notifyDataSetChanged()和notifyDataSetInvalidated() 。 我的代码看起来像这样: private void updateData() { List<DataItems> newList = getNewList(); MyAdapter adapter = new MyAdapter(getContext()); //my adapter holds an internal list of DataItems adapter.setList(newList); mList.setAdapter(adapter); adapter.notifyDataSetChanged(); mList.invalidateViews(); }
我总是使用LayoutInflater和findViewById在Adapter的getView方法中创build新项目。 但在许多文章中,人们写的findViewById是非常非常慢,强烈build议使用查看持有人模式。 任何人都可以解释为什么findViewById是如此之慢? 为什么查看模式更快? 如果需要将不同的项目添加到ListView我应该怎么做? 我应该为每种types创build类吗? static class ViewHolderItem1 { TextView textViewItem; } static class ViewHolderItem2 { Button btnViewItem; } static class ViewHolderItem3 { Button btnViewItem; ImageView imgViewItem; }
我有自定义适配器(基本适配器)的列表视图。 我想按位置从列表视图中查看。 我尝试了mListView.getChildAt(position) ,但它不工作。 我如何获得按位置的项目视图?
我想创build一个自定义ListView像这样: 我认为我必须使用BaseAdapter但我不知道它。 请帮帮我。 感谢名单。
我在Android中使用v4兼容性ViewPager。 我的FragmentActivity有一堆数据,这些数据将以不同的方式显示在ViewPager的不同页面上。 到目前为止,我只有3个相同的ListFragment实例,但将来我会有3个不同的ListFragments实例。 ViewPager在垂直电话屏幕上,列表不是并排的。 现在,ListFragment上的一个button启动一个单独的整页活动(通过FragmentActivity),返回FragmentActivity修改数据并保存,然后尝试更新其ViewPager中的所有视图。 就在这里,我被卡住了。 public class ProgressMainActivity extends FragmentActivity { MyAdapter mAdapter; ViewPager mPager; @Override public void onCreate(Bundle savedInstanceState) { … mAdapter = new MyAdapter(getSupportFragmentManager()); mPager = (ViewPager) findViewById(R.id.viewpager); mPager.setAdapter(mAdapter); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { … updateFragments(); … } public void updateFragments() { //Attempt 1: //mAdapter.notifyDataSetChanged(); //mPager.setAdapter(mAdapter); […]