首页 \ 问答 \ 如何使用Volley Library的ImageLoader?(How to use ImageLoader of Volley Library?)

如何使用Volley Library的ImageLoader?(How to use ImageLoader of Volley Library?)

我正在使用volley库从网络加载图像并获取nullpointer异常。 我在Adapter类中使用它。在获取实例或我没有得到任何问题。 getView()抛出nullpointerexception

VolleySingleton.java

package com.w3nuts.babaa.helper;

import android.content.Context;
import android.graphics.Bitmap;
import android.support.v4.util.LruCache;

import com.android.volley.RequestQueue;
import com.android.volley.toolbox.ImageLoader;
import com.android.volley.toolbox.Volley;

public class VolleySingleton {

	private static VolleySingleton instance;
	private RequestQueue requestQueue;
	private static ImageLoader imageLoader;

	private VolleySingleton(Context context) {
		requestQueue = Volley.newRequestQueue(context);

		imageLoader = new ImageLoader(requestQueue,
				new ImageLoader.ImageCache() {
					private final LruCache<String, Bitmap> cache = new LruCache<String, Bitmap>(
							20);

					@Override
					public Bitmap getBitmap(String url) {
						return cache.get(url);
					}

					@Override
					public void putBitmap(String url, Bitmap bitmap) {
						cache.put(url, bitmap);
					}
				});
	}

	public static VolleySingleton getInstance(Context context) {
		if (instance == null) {
			instance = new VolleySingleton(context);
		}
		return instance;
	}

	public RequestQueue getRequestQueue() {
		return requestQueue;
	}

	public static ImageLoader getImageLoader() {
		return imageLoader;
	}
}


ServiceListAdapter.class

package com.w3nuts.babaa.adapter;

import java.util.ArrayList;

import android.app.Activity;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.RatingBar;
import android.widget.TextView;

import com.android.volley.VolleyError;
import com.android.volley.toolbox.ImageLoader;
import com.android.volley.toolbox.ImageLoader.ImageContainer;
import com.android.volley.toolbox.ImageLoader.ImageListener;
import com.android.volley.toolbox.NetworkImageView;
import com.w3nuts.babaa.R;
import com.w3nuts.babaa.getterSetter.ServiceDetailGetterSetter;
import com.w3nuts.babaa.helper.VolleySingleton;

public class ServiceListAdapter extends BaseAdapter {

	private Activity activity;
	private LayoutInflater inflater;
	private ArrayList<ServiceDetailGetterSetter> serviceDetailList;

	// Typeface tfRegular, tfLight;

	public ServiceListAdapter(Activity activity,
			ArrayList<ServiceDetailGetterSetter> serviceDetailList) {
		this.activity = activity;
		this.serviceDetailList = serviceDetailList;
	}

	@Override
	public int getCount() {
		return serviceDetailList.size();
	}

	@Override
	public Object getItem(int position) {
		return serviceDetailList.get(position);
	}

	@Override
	public long getItemId(int position) {
		return position;
	}

	private class ViewHolder {
		RatingBar ratingBar;
		TextView name;
		TextView location;
		TextView rating;
		NetworkImageView image;
	}

	@Override
	public View getView(int position, View convertView, ViewGroup parent) {
		final ViewHolder holder;

		View view = convertView;
		if (convertView == null) {
			inflater = activity.getLayoutInflater();
			convertView = inflater.inflate(R.layout.service_list_item, null);

			holder = new ViewHolder();
			holder.name = (TextView) convertView.findViewById(R.id.name);
			holder.location = (TextView) convertView
					.findViewById(R.id.location);
			holder.rating = (TextView) convertView
					.findViewById(R.id.rating_text);
			holder.image = (NetworkImageView) convertView
					.findViewById(R.id.task_image);
			holder.ratingBar = (RatingBar) convertView
					.findViewById(R.id.rating_bar);
			convertView.setTag(holder);
		} else {
			holder = (ViewHolder) convertView.getTag();
		}

		holder.name.setText(serviceDetailList.get(position).getTitle());
		holder.location.setText(serviceDetailList.get(position).getLocation());
		holder.rating.setText(serviceDetailList.get(position).getRating() + "");
		holder.ratingBar.setRating((float) serviceDetailList.get(position)
				.getRating());
		// ////VOLLEY IMAGE LOADER
		String url = serviceDetailList.get(position).getImage();
		ImageLoader imageLoader = VolleySingleton.getImageLoader();

		imageLoader.get(url, new ImageListener() {

			public void onErrorResponse(VolleyError error) {
				holder.image.setImageResource(R.drawable.ic_launcher);
			}

			public void onResponse(ImageContainer response, boolean arg1) {
				if (response.getBitmap() != null) {
					holder.image.setImageBitmap(response.getBitmap());
				}
			}
		});

		Log.i("title", serviceDetailList.get(position).getTitle());
		Log.i("location", serviceDetailList.get(position).getLocation());
		Log.i("image", serviceDetailList.get(position).getImage());
		// SET TEXT AND IMAGE HERE

		return convertView;
	}
}



Service_list_item.xml

 <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal" >

        <com.android.volley.toolbox.NetworkImageView
            android:id="@+id/task_image"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:adjustViewBounds="true"
            android:scaleType="centerInside"
            android:src="@drawable/task_demo_image" />
    </LinearLayout>

03-03 18:40:14.909:E / AndroidRuntime(6317):FATAL EXCEPTION:main 03-03 18:40:14.909:E / AndroidRuntime(6317):java.lang.NullPointerException 03-03 18:40:14.909: E / AndroidRuntime(6317):at com.w3nuts.babaa.adapter.ServiceListAdapter.getView(ServiceListAdapter.java:93)03-03 18:40:14.909:E / AndroidRuntime(6317):at android.widget.AbsListView.obtainView (AbsListView.java:2177)03-03 18:40:14.909:E / AndroidRuntime(6317):在android.widget.ListView.makeAndAddView(ListView.java:1840)03-03 18:40:14.909:E / AndroidRuntime (6317):在android.widget.ListView.fillDown(ListView.java:675)03-03 18:40:14.909:E / AndroidRuntime(6317):在android.widget.ListView.fillFromTop(ListView.java:736) 03-03 18:40:14.909:E / AndroidRuntime(6317):在android.widget.ListView.layoutChildren(ListView.java:1655)03-03 18:40:14.909:E / AndroidRuntime(6317):在android。 widget.AbsListView.onLayout(AbsListView.java:2012)03-03 18:40:14.909:E / AndroidRuntime(6317):at android.view.View.layout(View.java:14289)03-03 18:40: 14.9 09:E / AndroidRuntime(6317):在android.view.ViewGroup.layout(ViewGroup.java:4562)03-03 18:40:14.909:E / AndroidRuntime(6317):在android.widget.LinearLayout.setChildFrame(LinearLayout) .java:1671)03-03 18:40:14.909:E / AndroidRuntime(6317):在android.widget.LinearLayout.layoutHorizo​​ntal(LinearLayout.java:1660)03-03 18:40:14.909:E / AndroidRuntime(6317) ):在android.widget.LinearLayout.onLayout(LinearLayout.java:1436)03-03 18:40:14.909:E / AndroidRuntime(6317):在android.view.View.layout(View.java:14289)03- 03 18:40:14.909:E / AndroidRuntime(6317):在android.view.ViewGroup.layout(ViewGroup.java:4562)03-03 18:40:14.909:E / AndroidRuntime(6317):在android.widget。 FrameLayout.onLayout(FrameLayout.java:448)03-03 18:40:14.909:E / AndroidRuntime(6317):在android.view.View.layout(View.java:14289)03-03 18:40:14.909: E / AndroidRuntime(6317):在android.view.ViewGroup.layout(ViewGroup.java:4562)03-03 18:40:14.909:E / AndroidRuntime(6317):在android.widget.LinearLayout.setChildFrame(LinearLayout。 java:1671)03-03 18:40:14.909:E / AndroidRuntime(6317):在android.widget.LinearLayout.layoutVertical(LinearLayout.java:1525)03-03 18:40:14.909:E / AndroidRuntime(6317) :在android.widget.LinearLayout.onLayout(LinearLayout.java:1434)03-03 18:40:14.909:E / AndroidRuntime(6317):at android.view.View.layout(View.java:14289)03-03 18:40:14.909:E / AndroidRuntime(6317):在android.view.ViewGroup.layout(ViewGroup.java:4562)03-03 18:40:14.909:E / AndroidRuntime(6317):在android.widget.FrameLayout .onLayout(FrameLayout.java:448)03-03 18:40:14.909:E / AndroidRuntime(6317):在android.view.View.layout(View.java:14289)03-03 18:40:14.909:E / AndroidRuntime(6317):在android.view.ViewGroup.layout(ViewGroup.java:4562)03-03 18:40:14.909:E / AndroidRuntime(6317):在android.widget.FrameLayout.onLayout(FrameLayout.java: 448)03-03 18:40:14.909:E / AndroidRuntime(6317):在android.view.View.layout(View.java:14289)03-03 18:40:14.909:E / AndroidRuntime(6317):at android.view.ViewGroup.layout(ViewGroup.java:45 62)03-03 18:40:14.909:E / AndroidRuntime(6317):在android.widget.FrameLayout.onLayout(FrameLayout.java:448)03-03 18:40:14.909:E / AndroidRuntime(6317):at android.view.View.layout(View.java:14289)03-03 18:40:14.909:E / AndroidRuntime(6317):at android.view.ViewGroup.layout(ViewGroup.java:4562)03-03 18: 40:14.909:E / AndroidRuntime(6317):在android.widget.LinearLayout.setChildFrame(LinearLayout.java:1671)03-03 18:40:14.909:E / AndroidRuntime(6317):在android.widget.LinearLayout.layoutVertical (LinearLayout.java:1525)03-03 18:40:14.909:E / AndroidRuntime(6317):在android.widget.LinearLayout.onLayout(LinearLayout.java:1434)03-03 18:40:14.909:E / AndroidRuntime (6317):在android.view.View.layout(View.java:14289)03-03 18:40:14.909:E / AndroidRuntime(6317):在android.view.ViewGroup.layout(ViewGroup.java:4562) 03-03 18:40:14.909:E / AndroidRuntime(6317):在android.widget.FrameLayout.onLayout(FrameLayout.java:448)03-03 18:40:14.909:E / AndroidRuntime(6317):在android。 view.View.layout(查看。 java:14289)03-03 18:40:14.909:E / AndroidRuntime(6317):在android.view.ViewGroup.layout(ViewGroup.java:4562)03-03 18:40:14.909:E / AndroidRuntime(6317) :在android.widget.RelativeLayout.onLayout(RelativeLayout.java:1076)03-03 18:40:14.909:E / AndroidRuntime(6317):at android.view.View.layout(View.java:14289)03-03 18:40:14.909:E / AndroidRuntime(6317):在android.view.ViewGroup.layout(ViewGroup.java:4562)03-03 18:40:14.909:E / AndroidRuntime(6317):在android.widget.FrameLayout .onLayout(FrameLayout.java:448)03-03 18:40:14.909:E / AndroidRuntime(6317):在android.view.View.layout(View.java:14289)03-03 18:40:14.909:E / AndroidRuntime(6317):在android.view.ViewGroup.layout(ViewGroup.java:4562)03-03 18:40:14.909:E / AndroidRuntime(6317):在android.widget.LinearLayout.setChildFrame(LinearLayout.java: 1671)03-03 18:40:14.909:E / AndroidRuntime(6317):在android.widget.LinearLayout.layoutVertical(LinearLayout.java:1525)03-03 18:40:14.909:E / AndroidRuntime(6317):at android.widget.LinearLayo ut.onLayout(LinearLayout.java:1434)03-03 18:40:14.909:E / AndroidRuntime(6317):at android.view.View.layout(View.java:14289)03-03 18:40:14.909: E / AndroidRuntime(6317):在android.view.ViewGroup.layout(ViewGroup.java:4562)03-03 18:40:14.909:E / AndroidRuntime(6317):在android.widget.FrameLayout.onLayout(FrameLayout.java) :448)03-03 18:40:14.909:E / AndroidRuntime(6317):在android.view.View.layout(View.java:14289)03-03 18:40:14.909:E / AndroidRuntime(6317):在android.view.ViewGroup.layout(ViewGroup.java:4562)03-03 18:40:14.909:E / AndroidRuntime(6317):at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:1976)03-03 18 :40:14.909:E / AndroidRuntime(6317):在android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1730)03-03 18:40:14.909:E / AndroidRuntime(6317):在android.view.ViewRootImpl。 doTraversal(ViewRootImpl.java:1004)03-03 18:40:14.909:E / AndroidRuntime(6317):在android.view.ViewRootImpl $ TraversalRunnable.run(ViewRootImpl.java:5481)03-03 18:40:14.909: E / AndroidRu ntime(6317):在android.view.Choreographer $ CallbackRecord.run(Choreographer.java:749)03-03 18:40:14.909:E / AndroidRuntime(6317):在android.view.Choreographer.doCallbacks(Choreographer.java) :562)03-03 18:40:14.909:E / AndroidRuntime(6317):在android.view.Choreographer.doFrame(Choreographer.java:532)03-03 18:40:14.909:E / AndroidRuntime(6317):在android.view.Choreographer $ FrameDisplayEventReceiver.run(Choreographer.java:735)03-03 18:40:14.909:E / AndroidRuntime(6317):在android.os.Handler.handleCallback(Handler.java:730)03- 03 18:40:14.909:E / AndroidRuntime(6317):在android.os.Handler.dispatchMessage(Handler.java:92)03-03 18:40:14.909:E / AndroidRuntime(6317):在android.os。 Looper.loop(Looper.java:137)03-03 18:40:14.909:E / AndroidRuntime(6317):在android.app.ActivityThread.main(ActivityThread.java:5103)03-03 18:40:14.909: E / AndroidRuntime(6317):at java.lang.reflect.Method.invokeNative(Native Method)03-03 18:40:14.909:E / AndroidRuntime(6317):at java.lang.reflect.Method.invoke(M ethod.java:525)03-03 18:40:14.909:E / AndroidRuntime(6317):at com.andr


I am using volley library to load image from network and getting nullpointer exception. I am using it in Adapter class.Is there any problem in getting instance or what i am not getting. getView() throws nullpointerexception

VolleySingleton.java

package com.w3nuts.babaa.helper;

import android.content.Context;
import android.graphics.Bitmap;
import android.support.v4.util.LruCache;

import com.android.volley.RequestQueue;
import com.android.volley.toolbox.ImageLoader;
import com.android.volley.toolbox.Volley;

public class VolleySingleton {

	private static VolleySingleton instance;
	private RequestQueue requestQueue;
	private static ImageLoader imageLoader;

	private VolleySingleton(Context context) {
		requestQueue = Volley.newRequestQueue(context);

		imageLoader = new ImageLoader(requestQueue,
				new ImageLoader.ImageCache() {
					private final LruCache<String, Bitmap> cache = new LruCache<String, Bitmap>(
							20);

					@Override
					public Bitmap getBitmap(String url) {
						return cache.get(url);
					}

					@Override
					public void putBitmap(String url, Bitmap bitmap) {
						cache.put(url, bitmap);
					}
				});
	}

	public static VolleySingleton getInstance(Context context) {
		if (instance == null) {
			instance = new VolleySingleton(context);
		}
		return instance;
	}

	public RequestQueue getRequestQueue() {
		return requestQueue;
	}

	public static ImageLoader getImageLoader() {
		return imageLoader;
	}
}


ServiceListAdapter.class

package com.w3nuts.babaa.adapter;

import java.util.ArrayList;

import android.app.Activity;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.RatingBar;
import android.widget.TextView;

import com.android.volley.VolleyError;
import com.android.volley.toolbox.ImageLoader;
import com.android.volley.toolbox.ImageLoader.ImageContainer;
import com.android.volley.toolbox.ImageLoader.ImageListener;
import com.android.volley.toolbox.NetworkImageView;
import com.w3nuts.babaa.R;
import com.w3nuts.babaa.getterSetter.ServiceDetailGetterSetter;
import com.w3nuts.babaa.helper.VolleySingleton;

public class ServiceListAdapter extends BaseAdapter {

	private Activity activity;
	private LayoutInflater inflater;
	private ArrayList<ServiceDetailGetterSetter> serviceDetailList;

	// Typeface tfRegular, tfLight;

	public ServiceListAdapter(Activity activity,
			ArrayList<ServiceDetailGetterSetter> serviceDetailList) {
		this.activity = activity;
		this.serviceDetailList = serviceDetailList;
	}

	@Override
	public int getCount() {
		return serviceDetailList.size();
	}

	@Override
	public Object getItem(int position) {
		return serviceDetailList.get(position);
	}

	@Override
	public long getItemId(int position) {
		return position;
	}

	private class ViewHolder {
		RatingBar ratingBar;
		TextView name;
		TextView location;
		TextView rating;
		NetworkImageView image;
	}

	@Override
	public View getView(int position, View convertView, ViewGroup parent) {
		final ViewHolder holder;

		View view = convertView;
		if (convertView == null) {
			inflater = activity.getLayoutInflater();
			convertView = inflater.inflate(R.layout.service_list_item, null);

			holder = new ViewHolder();
			holder.name = (TextView) convertView.findViewById(R.id.name);
			holder.location = (TextView) convertView
					.findViewById(R.id.location);
			holder.rating = (TextView) convertView
					.findViewById(R.id.rating_text);
			holder.image = (NetworkImageView) convertView
					.findViewById(R.id.task_image);
			holder.ratingBar = (RatingBar) convertView
					.findViewById(R.id.rating_bar);
			convertView.setTag(holder);
		} else {
			holder = (ViewHolder) convertView.getTag();
		}

		holder.name.setText(serviceDetailList.get(position).getTitle());
		holder.location.setText(serviceDetailList.get(position).getLocation());
		holder.rating.setText(serviceDetailList.get(position).getRating() + "");
		holder.ratingBar.setRating((float) serviceDetailList.get(position)
				.getRating());
		// ////VOLLEY IMAGE LOADER
		String url = serviceDetailList.get(position).getImage();
		ImageLoader imageLoader = VolleySingleton.getImageLoader();

		imageLoader.get(url, new ImageListener() {

			public void onErrorResponse(VolleyError error) {
				holder.image.setImageResource(R.drawable.ic_launcher);
			}

			public void onResponse(ImageContainer response, boolean arg1) {
				if (response.getBitmap() != null) {
					holder.image.setImageBitmap(response.getBitmap());
				}
			}
		});

		Log.i("title", serviceDetailList.get(position).getTitle());
		Log.i("location", serviceDetailList.get(position).getLocation());
		Log.i("image", serviceDetailList.get(position).getImage());
		// SET TEXT AND IMAGE HERE

		return convertView;
	}
}



Service_list_item.xml

 <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal" >

        <com.android.volley.toolbox.NetworkImageView
            android:id="@+id/task_image"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:adjustViewBounds="true"
            android:scaleType="centerInside"
            android:src="@drawable/task_demo_image" />
    </LinearLayout>

03-03 18:40:14.909: E/AndroidRuntime(6317): FATAL EXCEPTION: main 03-03 18:40:14.909: E/AndroidRuntime(6317): java.lang.NullPointerException 03-03 18:40:14.909: E/AndroidRuntime(6317): at com.w3nuts.babaa.adapter.ServiceListAdapter.getView(ServiceListAdapter.java:93) 03-03 18:40:14.909: E/AndroidRuntime(6317): at android.widget.AbsListView.obtainView(AbsListView.java:2177) 03-03 18:40:14.909: E/AndroidRuntime(6317): at android.widget.ListView.makeAndAddView(ListView.java:1840) 03-03 18:40:14.909: E/AndroidRuntime(6317): at android.widget.ListView.fillDown(ListView.java:675) 03-03 18:40:14.909: E/AndroidRuntime(6317): at android.widget.ListView.fillFromTop(ListView.java:736) 03-03 18:40:14.909: E/AndroidRuntime(6317): at android.widget.ListView.layoutChildren(ListView.java:1655) 03-03 18:40:14.909: E/AndroidRuntime(6317): at android.widget.AbsListView.onLayout(AbsListView.java:2012) 03-03 18:40:14.909: E/AndroidRuntime(6317): at android.view.View.layout(View.java:14289) 03-03 18:40:14.909: E/AndroidRuntime(6317): at android.view.ViewGroup.layout(ViewGroup.java:4562) 03-03 18:40:14.909: E/AndroidRuntime(6317): at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1671) 03-03 18:40:14.909: E/AndroidRuntime(6317): at android.widget.LinearLayout.layoutHorizontal(LinearLayout.java:1660) 03-03 18:40:14.909: E/AndroidRuntime(6317): at android.widget.LinearLayout.onLayout(LinearLayout.java:1436) 03-03 18:40:14.909: E/AndroidRuntime(6317): at android.view.View.layout(View.java:14289) 03-03 18:40:14.909: E/AndroidRuntime(6317): at android.view.ViewGroup.layout(ViewGroup.java:4562) 03-03 18:40:14.909: E/AndroidRuntime(6317): at android.widget.FrameLayout.onLayout(FrameLayout.java:448) 03-03 18:40:14.909: E/AndroidRuntime(6317): at android.view.View.layout(View.java:14289) 03-03 18:40:14.909: E/AndroidRuntime(6317): at android.view.ViewGroup.layout(ViewGroup.java:4562) 03-03 18:40:14.909: E/AndroidRuntime(6317): at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1671) 03-03 18:40:14.909: E/AndroidRuntime(6317): at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1525) 03-03 18:40:14.909: E/AndroidRuntime(6317): at android.widget.LinearLayout.onLayout(LinearLayout.java:1434) 03-03 18:40:14.909: E/AndroidRuntime(6317): at android.view.View.layout(View.java:14289) 03-03 18:40:14.909: E/AndroidRuntime(6317): at android.view.ViewGroup.layout(ViewGroup.java:4562) 03-03 18:40:14.909: E/AndroidRuntime(6317): at android.widget.FrameLayout.onLayout(FrameLayout.java:448) 03-03 18:40:14.909: E/AndroidRuntime(6317): at android.view.View.layout(View.java:14289) 03-03 18:40:14.909: E/AndroidRuntime(6317): at android.view.ViewGroup.layout(ViewGroup.java:4562) 03-03 18:40:14.909: E/AndroidRuntime(6317): at android.widget.FrameLayout.onLayout(FrameLayout.java:448) 03-03 18:40:14.909: E/AndroidRuntime(6317): at android.view.View.layout(View.java:14289) 03-03 18:40:14.909: E/AndroidRuntime(6317): at android.view.ViewGroup.layout(ViewGroup.java:4562) 03-03 18:40:14.909: E/AndroidRuntime(6317): at android.widget.FrameLayout.onLayout(FrameLayout.java:448) 03-03 18:40:14.909: E/AndroidRuntime(6317): at android.view.View.layout(View.java:14289) 03-03 18:40:14.909: E/AndroidRuntime(6317): at android.view.ViewGroup.layout(ViewGroup.java:4562) 03-03 18:40:14.909: E/AndroidRuntime(6317): at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1671) 03-03 18:40:14.909: E/AndroidRuntime(6317): at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1525) 03-03 18:40:14.909: E/AndroidRuntime(6317): at android.widget.LinearLayout.onLayout(LinearLayout.java:1434) 03-03 18:40:14.909: E/AndroidRuntime(6317): at android.view.View.layout(View.java:14289) 03-03 18:40:14.909: E/AndroidRuntime(6317): at android.view.ViewGroup.layout(ViewGroup.java:4562) 03-03 18:40:14.909: E/AndroidRuntime(6317): at android.widget.FrameLayout.onLayout(FrameLayout.java:448) 03-03 18:40:14.909: E/AndroidRuntime(6317): at android.view.View.layout(View.java:14289) 03-03 18:40:14.909: E/AndroidRuntime(6317): at android.view.ViewGroup.layout(ViewGroup.java:4562) 03-03 18:40:14.909: E/AndroidRuntime(6317): at android.widget.RelativeLayout.onLayout(RelativeLayout.java:1076) 03-03 18:40:14.909: E/AndroidRuntime(6317): at android.view.View.layout(View.java:14289) 03-03 18:40:14.909: E/AndroidRuntime(6317): at android.view.ViewGroup.layout(ViewGroup.java:4562) 03-03 18:40:14.909: E/AndroidRuntime(6317): at android.widget.FrameLayout.onLayout(FrameLayout.java:448) 03-03 18:40:14.909: E/AndroidRuntime(6317): at android.view.View.layout(View.java:14289) 03-03 18:40:14.909: E/AndroidRuntime(6317): at android.view.ViewGroup.layout(ViewGroup.java:4562) 03-03 18:40:14.909: E/AndroidRuntime(6317): at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1671) 03-03 18:40:14.909: E/AndroidRuntime(6317): at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1525) 03-03 18:40:14.909: E/AndroidRuntime(6317): at android.widget.LinearLayout.onLayout(LinearLayout.java:1434) 03-03 18:40:14.909: E/AndroidRuntime(6317): at android.view.View.layout(View.java:14289) 03-03 18:40:14.909: E/AndroidRuntime(6317): at android.view.ViewGroup.layout(ViewGroup.java:4562) 03-03 18:40:14.909: E/AndroidRuntime(6317): at android.widget.FrameLayout.onLayout(FrameLayout.java:448) 03-03 18:40:14.909: E/AndroidRuntime(6317): at android.view.View.layout(View.java:14289) 03-03 18:40:14.909: E/AndroidRuntime(6317): at android.view.ViewGroup.layout(ViewGroup.java:4562) 03-03 18:40:14.909: E/AndroidRuntime(6317): at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:1976) 03-03 18:40:14.909: E/AndroidRuntime(6317): at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1730) 03-03 18:40:14.909: E/AndroidRuntime(6317): at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1004) 03-03 18:40:14.909: E/AndroidRuntime(6317): at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:5481) 03-03 18:40:14.909: E/AndroidRuntime(6317): at android.view.Choreographer$CallbackRecord.run(Choreographer.java:749) 03-03 18:40:14.909: E/AndroidRuntime(6317): at android.view.Choreographer.doCallbacks(Choreographer.java:562) 03-03 18:40:14.909: E/AndroidRuntime(6317): at android.view.Choreographer.doFrame(Choreographer.java:532) 03-03 18:40:14.909: E/AndroidRuntime(6317): at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:735) 03-03 18:40:14.909: E/AndroidRuntime(6317): at android.os.Handler.handleCallback(Handler.java:730) 03-03 18:40:14.909: E/AndroidRuntime(6317): at android.os.Handler.dispatchMessage(Handler.java:92) 03-03 18:40:14.909: E/AndroidRuntime(6317): at android.os.Looper.loop(Looper.java:137) 03-03 18:40:14.909: E/AndroidRuntime(6317): at android.app.ActivityThread.main(ActivityThread.java:5103) 03-03 18:40:14.909: E/AndroidRuntime(6317): at java.lang.reflect.Method.invokeNative(Native Method) 03-03 18:40:14.909: E/AndroidRuntime(6317): at java.lang.reflect.Method.invoke(Method.java:525) 03-03 18:40:14.909: E/AndroidRuntime(6317): at com.andr


原文:https://stackoverflow.com/questions/28833158
更新时间:2021-12-11 08:12

最满意答案

你需要初始化新元素的插件

// autocomplete function

$(function () {
    function autocomplete($els) {
        $els.autocomplete({
            source: [{
                label: "auto1",
                Weight: "3400kg",
                Width: "1M",
                Height: "4M"
            }, {
                label: "car 2",
                Weight: "3000kg",
                Width: "2M",
                Height: "14M"
            }, {
                label: "motorcycle 12",
                Weight: "70kg",
                Width: "5M",
                Height: "3M"
            }],
            minLength: 0,
            select: function (event, ui) {
                event.preventDefault();
                $().val(ui.item.label);

                this.value = ui.item.label;
                var $tr = $(this).closest('tr');
                $tr.find('.weight').val(ui.item.Weight),

                this.value = ui.item.label;
                $tr.find('.width').val(ui.item.Width),

                this.value = ui.item.label;
                $tr.find('.height').val(ui.item.Height);

            }
        });
    }

    autocomplete($("#cars_1"))

    $('#btnAdd').click(function () {

        var num = $('.datatable_class').length;
        var newNum = num + 1;
        var newElem = $('#input1').clone().attr('id', 'input' + newNum).removeClass('clonedInput').addClass('ShowClones');

        newElem.find('.cars').attr('id', 'cars_' + newNum);
        newElem.find('.weight').attr('id', 'weight_' + newNum);
        newElem.find('.width').attr('id', 'width_' + newNum);
        newElem.find('.height').attr('id', 'height_' + newNum);

        $('#input' + num).after(newElem);
        autocomplete($("#cars_" + newNum))


        if (newNum == 300)

        $('#btnAdd').attr('disabled', 'disabled');
    });
});

演示: 小提琴


You need to initialize the plugin for the new element also like

// autocomplete function

$(function () {
    function autocomplete($els) {
        $els.autocomplete({
            source: [{
                label: "auto1",
                Weight: "3400kg",
                Width: "1M",
                Height: "4M"
            }, {
                label: "car 2",
                Weight: "3000kg",
                Width: "2M",
                Height: "14M"
            }, {
                label: "motorcycle 12",
                Weight: "70kg",
                Width: "5M",
                Height: "3M"
            }],
            minLength: 0,
            select: function (event, ui) {
                event.preventDefault();
                $().val(ui.item.label);

                this.value = ui.item.label;
                var $tr = $(this).closest('tr');
                $tr.find('.weight').val(ui.item.Weight),

                this.value = ui.item.label;
                $tr.find('.width').val(ui.item.Width),

                this.value = ui.item.label;
                $tr.find('.height').val(ui.item.Height);

            }
        });
    }

    autocomplete($("#cars_1"))

    $('#btnAdd').click(function () {

        var num = $('.datatable_class').length;
        var newNum = num + 1;
        var newElem = $('#input1').clone().attr('id', 'input' + newNum).removeClass('clonedInput').addClass('ShowClones');

        newElem.find('.cars').attr('id', 'cars_' + newNum);
        newElem.find('.weight').attr('id', 'weight_' + newNum);
        newElem.find('.width').attr('id', 'width_' + newNum);
        newElem.find('.height').attr('id', 'height_' + newNum);

        $('#input' + num).after(newElem);
        autocomplete($("#cars_" + newNum))


        if (newNum == 300)

        $('#btnAdd').attr('disabled', 'disabled');
    });
});

Demo: Fiddle

相关问答

更多