2012-01-04 64 views
0

list_item.java呼叫和实例适配器为ListView

public class List_Items extends ListActivity{ 

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
     setContentView(R.layout.list_item); 


     ListView lv = (ListView) this.findViewById(android.R.id.list); 

     lv.setAdapter((ListAdapter) new ImageAndTextListAdapter(this, xxx)); 


     Button btn=(Button) findViewById(R.id.button_sync); 
     btn.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View v) { 
        } 
        // code here 
       } 
       } 

ImageAndTextListAdapter.java

public class ImageAndTextListAdapter extends ArrayAdapter<ImageAndText> { 

// new method 
    private ListView listView; 
    private AsyncImageLoader asyncImageLoader; 

//constructor 
public ImageAndTextListAdapter(Activity activity, List<ImageAndText> imageAndTexts) { 
    super(activity, 0, imageAndTexts); 

    //new method 
    this.listView = listView; 
    asyncImageLoader = new AsyncImageLoader(); 
} 

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    Activity activity = (Activity) getContext(); 
    // ...... 

} 

}

ImageAndText.java

public class ImageAndText { 
    private String imageUrl; 
    private String text; 

public ImageAndText(String imageUrl, String text) { 
    this.imageUrl = imageUrl; 
    this.text = text; 
} 
public String getImageUrl() { 
    return imageUrl; 
} 
public String getText() { 
    return text; 
} 

}

AsyncImageLoader.java

public class AsyncImageLoader { 
    private HashMap<String, SoftReference<Drawable>> imageCache; 
    HashMap<String, SoftReference<Drawable>> drawableMap = new HashMap<String,   SoftReference<Drawable>>(); 


public AsyncImageLoader() { 
    //HashMap<String, SoftReference<Drawable>> drawableMap = new HashMap<String, SoftReference<Drawable>>(); 
} 

public Drawable loadDrawable(final String imageUrl, final ImageCallback imageCallback) { 

    if (drawableMap.containsKey(imageUrl)) { 
     SoftReference<Drawable> softReference = imageCache.get(imageUrl); 
     Drawable drawable = softReference.get(); 
     if (drawable != null) { 
      return drawable; 
     } 
    } 
    final Handler handler = new Handler() { 
     @Override 
     public void handleMessage(Message message) { 
      imageCallback.imageLoaded((Drawable) message.obj, imageUrl); 
     } 
    }; 

    //this is the new thread that download the image from url 
    new Thread() { 
     @Override 
     public void run() { 
      Drawable drawable = loadImageFromUrl(imageUrl); 
      imageCache.put(imageUrl, new SoftReference<Drawable>(drawable)); 
      Message message = handler.obtainMessage(0, drawable); 
      handler.sendMessage(message); 
     } 
    }.start(); 
    return null; 
} 

public static Drawable loadImageFromUrl(String url) { 
     InputStream inputStream; 
     try { 
      inputStream = new URL(url).openStream(); 
     } catch (IOException e) { 
      throw new RuntimeException(e); 
     } 
     return Drawable.createFromStream(inputStream, "src"); 
} 

public interface ImageCallback { 
    public void imageLoaded(Drawable imageDrawable, String imageUrl); 
} 

}

在这个例子中,list_item.java的列表视图最初是空的,并且它会调用这将调用web网址提供列表视图的ImageAndTextListAdapter图像和文本的数据行动态。

我的问题是如何调用适配器,lv.setAdapter((ListAdapter)new ImageAndTextListAdapter(this,xxx));什么应该是xxx?我可以只做一个xxx = List imageAndTexts ImageAndText类的列表,但不是重复ImaheAndTextListAdapter构造函数中的内容?

其次,我应该提供点击程序,公共无效的onClick(视图v){} // 代码在这里 }} 的LIST_ITEM内内。
我的目标是击中按钮,这将启动提供所有必要数据的adpater的操作。

回答

1

从ImageAndTextListAdapter适配器中,xxx应该是一个List。

您的适配器需要一个Activity和List两个参数。

所以,你应该创建一个列表,并创建ImageAndText类的对象添加到列表中这样的..

ImageAndText image = new ImageAndText("url","Test"); 
List<ImageAndText>text; 
text.add(image); //Add the Object of ImageAndText 
ListView lv = (ListView) findViewById(android.R.id.list); 

//Here i supply the adapter with the text list created. 
lv.setAdapter((ListAdapter)new ImageAndTextListAdapter(Main.this, text)); 
+0

OK,点击相关按钮的功能里面是什么。点击它,它会启动填写列表的所有操作。 – lilzz 2012-01-04 20:38:45

+0

我将不得不看更多的代码来看看AsyncImageLoader();那么我可以知道它需要什么参数 – 2012-01-04 20:45:30

+0

此外,编译器希望List text = NULL用于初始化。并警告说text.add(图像)空指针访问。如果代码被执行,那么它就会崩溃。我认为它需要正确启动。 – lilzz 2012-01-04 21:56:20