Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 我的自定义listview在向上滚动时会立即回滚到第一个元素。如何防止这种情况并使滚动平滑_Java_Android_Listview_User Interface_Adapter - Fatal编程技术网

Java 我的自定义listview在向上滚动时会立即回滚到第一个元素。如何防止这种情况并使滚动平滑

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

我正在尝试创建一个自定义listview,如下所示:

目前我设法创建了它,但有一个问题。例如,当有8个项目时,它将加载前4个项目,然后在向下滚动时加载重新绘制项目。向下滚动时,它工作正常

然而,当从列表的底部、中间向上滚动时,它会立即移动到顶部,跳过2-3-4。项目。然后您可以再次正常向下滚动,但当向上滚动时,它会立即进入列表的顶部

我怎样才能防止这种情况发生

这是我的密码:

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>