Java 我的自定义listview在向上滚动时会立即回滚到第一个元素。如何防止这种情况并使滚动平滑
我正在尝试创建一个自定义listview,如下所示: 目前我设法创建了它,但有一个问题。例如,当有8个项目时,它将加载前4个项目,然后在向下滚动时加载重新绘制项目。向下滚动时,它工作正常 然而,当从列表的底部、中间向上滚动时,它会立即移动到顶部,跳过2-3-4。项目。然后您可以再次正常向下滚动,但当向上滚动时,它会立即进入列表的顶部 我怎样才能防止这种情况发生 这是我的密码:Java 我的自定义listview在向上滚动时会立即回滚到第一个元素。如何防止这种情况并使滚动平滑,java,android,listview,user-interface,adapter,Java,Android,Listview,User Interface,Adapter,我正在尝试创建一个自定义listview,如下所示: 目前我设法创建了它,但有一个问题。例如,当有8个项目时,它将加载前4个项目,然后在向下滚动时加载重新绘制项目。向下滚动时,它工作正常 然而,当从列表的底部、中间向上滚动时,它会立即移动到顶部,跳过2-3-4。项目。然后您可以再次正常向下滚动,但当向上滚动时,它会立即进入列表的顶部 我怎样才能防止这种情况发生 这是我的密码: public class MyActivity extends Activity implements AdapterV
public class MyActivity extends Activity implements AdapterView.OnItemClickListener {
String headers[];
String image_urls[];
List<MyMenuItem> menuItems;
ListView mylistview;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_my);
menuItems = new ArrayList<MyMenuItem>();
headers = getResources().getStringArray(R.array.header_names);
image_urls = getResources().getStringArray(R.array.image_urls);
for (int i = 0; i < headers.length; i++) {
MyMenuItem item = new MyMenuItem(headers[i], image_urls[i]);
menuItems.add(item);
}
mylistview = (ListView) findViewById(R.id.list);
MenuAdapter adapter = new MenuAdapter(this, menuItems);
mylistview.setAdapter(adapter);
mylistview.setOnItemClickListener(this);
}
}
使用延迟加载机制加载图像数据。
有一个很好的例子显示了Listview的xml文件。这种情况发生在将视图与特定行的图像一起膨胀时花费的时间很短,而在tat中,它会滚动更多,因此我们会看到一行或两行。。我也在搜索sol以获取此:-/我添加了Listview的xml文件。Panther感谢您的帮助!我使用了一个与我加载的图像大小相同的占位符图像,所以现在看起来更好。
public class MyMenuItem {
private String item_header;
private String item_image_url;
public MyMenuItem(String item_header, String item_image_url){
this.item_header=item_header;
this.item_image_url=item_image_url;
}
public String getItem_header(){
return item_header;
}
public void setItem_header(String item_header){
this.item_header=item_header;
}
public String getItem_image_url(){
return item_image_url;
}
public void setItem_image_url(String item_image_url){
this.item_image_url=item_image_url;
}
}
public class MenuAdapter extends BaseAdapter{
Context context;
List<MyMenuItem> menuItems;
MenuAdapter(Context context, List<MyMenuItem> menuItems) {
this.context = context;
this.menuItems = menuItems;
}
@Override
public int getCount() {
return menuItems.size();
}
@Override
public Object getItem(int position) {
return menuItems.get(position);
}
@Override
public long getItemId(int position) {
return menuItems.indexOf(getItem(position));
}
private class ViewHolder {
ImageView ivMenu;
TextView tvMenuHeader;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder = null;
LayoutInflater mInflater = (LayoutInflater) context.getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
if (convertView == null) {
convertView = mInflater.inflate(R.layout.menu_item, null);
holder = new ViewHolder();
holder.tvMenuHeader = (TextView) convertView.findViewById(R.id.tvMenuHeader);
holder.ivMenu = (ImageView) convertView.findViewById(R.id.ivMenuItem);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
MyMenuItem row_pos = menuItems.get(position);
Picasso.with(context)
.load(row_pos.getItem_image_url())
// .placeholder(R.drawable.empty)
// .error(R.drawable.error)
.into(holder.ivMenu);
holder.tvMenuHeader.setText(row_pos.getItem_header());
Log.e("Test", "headers:" + row_pos.getItem_header());
return convertView;
}
}
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MyActivity">
<ListView
android:id="@+id/list"
android:layout_width="match_parent"
android:layout_height="match_parent"
/>
</RelativeLayout>