I'm using AsyncHttpClient
of loopj to get image file from the internet and display it on typical image view.
I found the convenient handler named FileAsyncHttpClient
and I've checked following simple code works as well as I expected.
public class MainActivity extends ActionBarActivity {
ImageView imgView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
imgView = (ImageView) findViewById(R.id.imgView);
AsyncHttpClient client = new AsyncHttpClient();
client.get("http://www.some_image_url.png",
new FileAsyncHttpResponseHandler(this){
@Override
public void onFailure(int statusCode, Header[] headers, Throwable throwable, File response) {}
@Override
public void onSuccess(int statusCode, Header[] headers, File response) {
imgView.setImageBitmap(BitmapFactory.decodeFile(response.getPath()));
}
});
}
}
But when I use this code in ArrayAdpater
class, not in Activity
class, setImageBitmap(...)
does not work. Moreover, any view controlling seems to be not allowed such as setVisibility(...)
.
Following code is the one in question.
public class MainActivity extends Activity {
private List<CustomClass> objectList = new ArrayList<CustomClass>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// ... make objectList from given data ... (omitted)
ArrayAdapter<CustomClass> adapter = new CustomListAdapter();
ListView list = (ListView) findViewById(R.id.customListView);
list.setAdapter(adapter);
}
private class CustomListAdapter extends ArrayAdapter<CustomClass> {
private View itemView;
ImageView imgView;
public MemberListAdapter() {
super(MainActivity.this, R.layout.custom_list, objectList);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
itemView = convertView;
if(itemView == null){
itemView = getLayoutInflater().inflate(R.layout.custom_list, parent, false);
}
CustomClass currentObj = objectList.get(position);
imgView = (ImageView) itemView.findViewById(R.id.imgView);
AsyncHttpClient client = new AsyncHttpClient();
client.get("http://www.some_image_url.png",
new FileAsyncHttpResponseHandler(this){
@Override
public void onFailure(int statusCode, Header[] headers, Throwable throwable, File response) {}
@Override
public void onSuccess(int statusCode, Header[] headers, File response) {
imgView.setImageBitmap(BitmapFactory.decodeFile(response.getPath()));
}
});
return itemView;
}
}
}
I don't know why this is not working. Please let me get an advice. Thanks.
p.s. I've checked controlling view inside the adapter but outside the handler is possible.