0
我有獲得由自定義適配器(延遲加載)應該顯示一些文本和image.SO我建了一個列表片段和自定義適配器低於實現this.Code填充列表片段但它扔錯誤顯示(登錄貓)的Android ListFragment和lazyloader適配器錯誤
ListFragment.java
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
new loadListView().execute();
}
protected DashBoardActivity fragmentActivity;
public void onAttach (DashBoardActivity activity){
fragmentActivity = (DashBoardActivity) activity;
}
public class loadListView extends AsyncTask<Integer, String, String> {
@Override
protected void onPreExecute() {
super.onPreExecute();
}
@Override
protected String doInBackground(Integer... args) {
motellist = new ArrayList<HashMap<String, String>>();
JSONObject json = JSONfunctions.getJSONfromURL(URL);
try{
JSONArray mot = json.getJSONArray("MOTEL");
for(int i=0;i<mot.length();i++){
HashMap<String, String> map = new HashMap<String, String>();
JSONObject e = mot.getJSONObject(i);
map.put(KEY_ID, e.getString(KEY_ID));
map.put(KEY_NAME, e.getString(KEY_NAME));
map.put(KEY_PRICE, e.getString(KEY_PRICE));
map.put(KEY_ROOMS, e.getString(KEY_ROOMS));
map.put(KEY_REF, e.getString(KEY_REF));
map.put(KEY_PHONE, e.getString(KEY_PHONE));
map.put(KEY_IMAGE_URL, e.getString(KEY_IMAGE_URL));
motellist.add(map);
}
}catch(JSONException e) {
Log.e("log_tag", "Error kupitisha data "+e.toString());
}
return null;
}
@Override
protected void onPostExecute(String args) {
//list = getListView();
adapter=new LazyAdapter (fragmentActivity, motellist);
list.setAdapter(adapter);
/**ArrayAdapter<String> adapter = new ArrayAdapter<String>(getActivity(),
android.R.layout.simple_list_item_1, values);
setListAdapter(adapter);*/
}
}
LazyAdapter.java
private Activity activity;
private ArrayList<HashMap<String, String>> data;
private static LayoutInflater inflater=null;
public ImageLoader imageLoader;
public LazyAdapter(Activity a, ArrayList<HashMap<String, String>> d) {
activity = a;
data=d;
inflater = (LayoutInflater)activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
imageLoader=new ImageLoader(activity);
}
public int getCount() {
return data.size();
}
public Object getItem(int position) {
return data.get(position);//nilifix hapa ju am using a custom
}
public long getItemId(int position) {
return position;
}
public View getView(int position, View convertView, ViewGroup parent) {
View vi=convertView;
if(convertView==null)
vi = inflater.inflate(R.layout.list_row, null);
TextView NAME = (TextView)vi.findViewById(R.id.name);
TextView PRICE = (TextView)vi.findViewById(R.id.board);
TextView REF= (TextView)vi.findViewById(R.id.ref);
TextView ROOMS = (TextView)vi.findViewById(R.id.units);
ImageView thumb_image=(ImageView)vi.findViewById(R.id.list_image);
HashMap<String, String> hash = new HashMap<String, String>();
hash = data.get(position);
// Setting all values in listview
NAME.setText(hash.get(ListFragment.KEY_NAME));
PRICE.setText("PRICE: "+hash.get(ListFragment.KEY_PRICE));
REF.setText("REF:"+hash.get(ListFragment.KEY_REF));
ROOMS.setText("ROOMS: "+hash.get(ListFragment.KEY_ROOMS));
imageLoader.DisplayImage(hash.get(ListFragment.KEY_IMAGE_URL), thumb_image);
return vi;
}
logcat的:
0-10 17:42:30.765: E/AndroidRuntime(17557): FATAL EXCEPTION: main
10-10 17:42:30.765: E/AndroidRuntime(17557): java.lang.NullPointerException
10-10 17:42:30.765: E/AndroidRuntime(17557): at com.symetry.myitprovider.fragment.ListFragment$loadListView.onPostExecute(ListFragment.java:92)
10-10 17:42:30.765: E/AndroidRuntime(17557): at com.symetry.myitprovider.fragment.ListFragment$loadListView.onPostExecute(ListFragment.java:1)
10-10 17:42:30.765: E/AndroidRuntime(17557): at android.os.AsyncTask.finish(AsyncTask.java:590)
10-10 17:42:30.765: E/AndroidRuntime(17557): at android.os.AsyncTask.access$600(AsyncTask.java:149)
10-10 17:42:30.765: E/AndroidRuntime(17557): at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:603)
10-10 17:42:30.765: E/AndroidRuntime(17557): at android.os.Handler.dispatchMessage(Handler.java:99)
10-10 17:42:30.765: E/AndroidRuntime(17557): at android.os.Looper.loop(Looper.java:132)
10-10 17:42:30.765: E/AndroidRuntime(17557): at android.app.ActivityThread.main(ActivityThread.java:4123)
10-10 17:42:30.765: E/AndroidRuntime(17557): at java.lang.reflect.Method.invokeNative(Native Method)
10-10 17:42:30.765: E/AndroidRuntime(17557): at java.lang.reflect.Method.invoke(Method.java:491)
10-10 17:42:30.765: E/AndroidRuntime(17557): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:844)
10-10 17:42:30.765: E/AndroidRuntime(17557): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:602)
10-10 17:42:30.765: E/AndroidRuntime(17557): at dalvik.system.NativeStart.main(Native Method)
名單已初始化....在變化融通您提供..the listfragment只是顯示加載...實際上本身並沒有填充ListView –
基本上,你應該做的是:(1)初始化適配器,並將其綁定到什麼在'onActivityCreated()'中用'setListAdapter(adapter)'調用'ListView'。你也可以調用'setListShown(false)'來表示數據尚未加載。 (2)讓你的'AsyncTask'產生某種容器對象的保存數據和可以被綁定到適配器(即'Cursor')。 (3)中的數據綁定到'onPostExecute適配器()'(和調用'setListShown(真)'如果你FALSE'之前將其設置爲')。 –
太感謝你了.....這完全曾爲.... –