我正在使用Android中的v4兼容性ViewPager.我的FragmentActivity有一堆数据,可以在我的ViewPager中的不同页面上以不同的方式显示.到目前为止,我只有3个相同的ListFragment实例,但将来我将有3个不同的ListFragments实例.ViewPager位于垂直电话屏幕上,列表不是并排的.
现在,ListFragment上的一个按钮启动一个单独的整页活动(通过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);
//Attempt 2:
//HomeListFragment fragment = (HomeListFragment) getSupportFragmentManager().findFragmentById(mAdapter.fragId[0]);
//fragment.updateDisplay();
}
public static class MyAdapter extends FragmentPagerAdapter implements
TitleProvider
{
int[] fragId = {0,0,0,0,0};
public MyAdapter(FragmentManager fm)
{
super(fm);
}
@Override …
Run Code Online (Sandbox Code Playgroud) android android-adapter android-fragments android-viewpager android-listfragment
我想知道在 Android环境中何时,何地以及如何使用适配器.
来自Android开发者文档的信息对我来说不够,我想得到更详细的分析.
我正在尝试刷新特定项目RecyclerView
.
故事:每当用户点击项目时,它都会显示AlertDialog
.用户可以通过单击确定按钮键入一些文本.我想在这个项目中显示这个文本并显示不可见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);
}
Run Code Online (Sandbox Code Playgroud)
但是这段代码不仅改变了传递位置的itemView,还改变了其他一些itemView(s)!
如何通过单击更改特定的itemView?
android android-adapter recycler-adapter android-recyclerview
当我必须使用带有ListView的经典适配器时,我在ListView中更新我的数据,如下所示:
myAdapter.swapArray(data);
public swapArray(List<Data> data) {
clear();
addAll(data);
notifyDataSetChanged();
}
Run Code Online (Sandbox Code Playgroud)
我想知道RecyclerView的最佳实践是什么.因为在RecyclerView适配器,你不能做clear
,并addAll
在ListView控件.
所以我尝试了一下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);
Run Code Online (Sandbox Code Playgroud)
但是使用这个最后的解决方案,我仍然需要创建我的适配器的新实例,我觉得它不是最好的解决方案.我应该能够在没有新的情况下更改我的数据MyRecyclerAdapter
.
我有一个用例,我需要RecyclerView
从适配器内部引用父,特别是在onBindViewHolder
方法内.到目前为止,我正在做的是将它分配给onCreateViewHolder
传递viewGroup parent
arg 的方法中的私有类成员,如下所示:
private ViewGroup mParent;
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
// inflater logic.
mParent = parent;
}
Run Code Online (Sandbox Code Playgroud)
并引用父RecyclerView
在onBindViewHolder
这样的:
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
// binder logic.
((RecyclerView)mParent).blahBlahBlah();
}
Run Code Online (Sandbox Code Playgroud)
有没有更好的方法呢?也许RecyclerView.Adapter
有一种我可能错过的方式?
我有自定义适配器(基本适配器)的listview.我想按位置从listview获取视图.我试过了mListView.getChildAt(position)
,但它没有用.如何按位置获取项目视图?
有什么不同?android文档没有notifyDataSetInvalidated()的描述.我想也许您调用该函数来通知所有已注册的侦听器,但是使用notifyDataSetChanged()来通知它们?
在我在互联网上找到的许多代码示例中,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;
}
Run Code Online (Sandbox Code Playgroud)
也有任何理由不使用上述方法,因为直到现在我还没有遇到任何使用它的问题.
我总是使用LayoutInflater
和findViewById
在一个getView
方法中创建新项目Adapter
.
但在许多文章中,人们写的findViewById
非常慢,强烈建议使用View Holder Pattern.
谁能解释为什么findViewById
这么慢?为什么View Holder Pattern更快?
如果需要添加不同的项目,我该怎么办ListView
?我应该为每种类型创建类吗?
static class ViewHolderItem1 {
TextView textViewItem;
}
static class ViewHolderItem2 {
Button btnViewItem;
}
static class ViewHolderItem3 {
Button btnViewItem;
ImageView imgViewItem;
}
Run Code Online (Sandbox Code Playgroud) 我想创建这样的自定义ListView
:
我想我必须使用,BaseAdapter
但我不知道.