我正在为我的ListView使用以下代码。
我的FragmentActivity
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
View view = inflater.inflate(R.layout.home, container, false);
listView = (ListView) view.findViewById(R.id.listView);
listView.setAdapter(new CustomArrayAdapterForHome(mContext,questions));
return view;
}
这是ListView的适配器
@SuppressLint("DefaultLocale")
public class CustomArrayAdapterForHome extends EndlessAdapter
{
private final LayoutInflater inflator;
protected ImageLoader imageLoader;
private DisplayImageOptions options;
private RotateAnimation rotate=null;
private View pendingView = null;
public CustomArrayAdapterForHome(Context ctx,ArrayList<Question> questionList)
{
super( new ArrayAdapter<Question>(ctx, R.layout.question_adapter_layout, questionList));
inflator = mContext.getLayoutInflater();
imageLoader = ImageLoader.getInstance();
options = new DisplayImageOptions.Builder()
.cacheInMemory()
.cacheOnDisc()
.showImageForEmptyUri(R.drawable.user_male)
.displayer(new RoundedBitmapDisplayer(5))
.build();
rotate=new RotateAnimation(0f, 360f, Animation.RELATIVE_TO_SELF,
0.5f, Animation.RELATIVE_TO_SELF,
0.5f);
rotate.setDuration(600);
rotate.setRepeatMode(Animation.RESTART);
rotate.setRepeatCount(Animation.INFINITE);
}
class ViewHolder
{
// MY CODE
}
@Override
public int getCount() {
return questions.size();
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent)
{
final Question question = questions.get(position);
final OpenionUser myUser = question.getUser();
// MY CODE
return view;
}
@Override
protected View getPendingView(ViewGroup parent)
{
View row = LayoutInflater.from(parent.getContext()).inflate(R.layout.row, null);
pendingView = row.findViewById(android.R.id.text1);
pendingView.setVisibility(View.GONE);
pendingView=row.findViewById(R.id.throbber);
pendingView.setVisibility(View.VISIBLE);
startProgressAnimation();
return(row);
}
private void startProgressAnimation()
{
if (pendingView!=null)
{
pendingView.startAnimation(rotate);
}
}
@Override
protected void appendCachedData()
{
}
@Override
protected boolean cacheInBackground() throws Exception
{
getQuestions();
return true;
}
}
上面的代码仅表现为没有调用简单的ListView,cacheInBackground或getPendingView。我还想添加一个headerView并且它也不起作用。
我在这里想念什么?
最佳答案
您在此处拥有的大多数代码都不属于EndlessAdapter
。引用the documentation:
它旨在环绕另一个适配器,在该适配器中您拥有“真实”数据。因此,它遵循装饰器模式,并通过新的Endless Technology(TM)扩展了当前的适配器。
因此,首先,创建一个常规的ArrayAdapter
,并获取所需的所有样式和内容(例如,您的getView()
实现)。然后,创建一个添加了“无尽”的EndlessAdapter
子类。
注意:EndlessAdapter
子类不应覆盖getView()
,因为这是添加无尽行为的地方EndlessAdapter
子类不应覆盖getCount()
,因为它是由EndlessAdapter
实现本身管理的
您可能希望检查the sample app以查看其如何实现EndlessAdapter
子类。
或者,由于EndlessAdapter
will not work with header views,您可能只需要切换到其他无限列表解决方案或自己滚动即可。