Android 根据文件扩展名在arraylist中设置ImageView图像
我正在为网站bayfiles.net创建一个应用程序 我有一个接收json数据的工作列表视图。这与文件名和大小配合得很好,现在我还有一个ImageView。我想确定它应该放在图标支架中的图标。这由文件名的结尾决定。e、 g.以“.png”结尾的文件名应显示带有“png”文本的图标。怎么做 这是我的工作活动:Android 根据文件扩展名在arraylist中设置ImageView图像,android,json,listview,icons,imageview,Android,Json,Listview,Icons,Imageview,我正在为网站bayfiles.net创建一个应用程序 我有一个接收json数据的工作列表视图。这与文件名和大小配合得很好,现在我还有一个ImageView。我想确定它应该放在图标支架中的图标。这由文件名的结尾决定。e、 g.以“.png”结尾的文件名应显示带有“png”文本的图标。怎么做 这是我的工作活动: public class FilesActivity extends SherlockActivity { EditText editsearch; fileObjectA
public class FilesActivity extends SherlockActivity {
EditText editsearch;
fileObjectAdapter adapter;
String httpurl, sessionId, filetype;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.dblist);
ActionBar abs = getSupportActionBar();
abs.setDisplayHomeAsUpEnabled(false);
abs.setTitle("BAYFILES");
//abs.setIcon(R.drawable.abs_logo);
abs.setDisplayShowCustomEnabled(true);
LayoutParams lp = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT, Gravity.RIGHT | Gravity.CENTER_VERTICAL);
View customNav = LayoutInflater.from(this).inflate(R.layout.actionbar, null);
abs.setCustomView(customNav, lp);
abs.setDisplayShowCustomEnabled(true);
abs.setDisplayOptions(abs.DISPLAY_SHOW_HOME|abs.DISPLAY_SHOW_CUSTOM);
abs.setDisplayShowTitleEnabled(true);
Crouton.makeText(this, "You have been signed in!", Style.CONFIRM).show();
ImageButton btnSearch = (ImageButton) findViewById(R.id.action_search);
btnSearch.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Log.d("Button Click","position");
}
});
Context context = getApplicationContext();
AppPrefs appPrefs = new AppPrefs(context);
sessionId = appPrefs.getSessionId();
newRequest("http://api.bayfiles.net/v1/account/files?session=" + sessionId);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
com.actionbarsherlock.view.MenuInflater inflater = getSupportMenuInflater();
inflater.inflate(R.menu.menu, (com.actionbarsherlock.view.Menu) menu);
return super.onCreateOptionsMenu(menu);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch(item.getItemId())
{
case R.id.refresh:
newRequest("http://api.bayfiles.net/v1/account/files?session=" + sessionId);
return true;
case R.id.settings:
Intent startNewActivityOpen = new Intent(FilesActivity.this, AccountActivity.class);
startActivityForResult(startNewActivityOpen, 0);
return true;
case R.id.upload:
Crouton.makeText(this, "Coming soon!", Style.INFO).show();
return true;
case R.id.link:
Crouton.makeText(this, "Add link from BayFiles", Style.INFO).show();
return true;
case R.id.folder:
Crouton.makeText(this, "Not available yet!", Style.INFO).show();
return true;
}
return super.onOptionsItemSelected(item);
}
@Override
public boolean onContextItemSelected(android.view.MenuItem item) {
switch(item.getItemId()){
case R.id.info:
Crouton.makeText(this, "Coming soon!", Style.INFO).show();
Log.d("log_tag", "Info");
break;
case R.id.delete:
new RequestTask().execute(httpurl);
newRequest("http://api.bayfiles.net/v1/account/files?session=" + sessionId);
break;
}
return super.onContextItemSelected(item);
}
@Override
public void onCreateContextMenu(ContextMenu menu, View v,
ContextMenuInfo menuInfo) {
super.onCreateContextMenu(menu, v, menuInfo);
MenuInflater inflate = getMenuInflater();
inflate.inflate(R.menu.context_menu, menu);
}
public static String readableFileSize(long size) {
if(size <= 0) return "0";
final String[] units = new String[] { "B", "KB", "MB", "GB", "TB" };
int digitGroups = (int) (Math.log10(size)/Math.log10(1024));
return new DecimalFormat("#,##0.#").format(size/Math.pow(1024, digitGroups)) + " " + units[digitGroups];
}
public void newRequest(String url){
String response = null;
DefaultHttpClient httpClient = new DefaultHttpClient();
ResponseHandler <String> resonseHandler = new BasicResponseHandler();
HttpPost postMethod = new HttpPost(url);
try {
JSONObject json = new JSONObject();
postMethod.setEntity(new ByteArrayEntity(json.toString().getBytes("UTF8")));
postMethod.setHeader( "Content-Type", "application/json" );
response = httpClient.execute(postMethod,resonseHandler);
JSONObject request = new JSONObject(response);
ArrayList<fileObject> objectList = new ArrayList<fileObject>();
for (Iterator<?> keyIterator = request.keys(); keyIterator.hasNext(); ) {
String key = (String) keyIterator.next();
JSONObject object = request.optJSONObject(key);
if (object != null) {
long l = Long.parseLong(object.getString("size"));
String size = readableFileSize(l);
String[] filetype = object.getString("filename").split("\\.");
Log.d("log_tag", filetype[1]);
fileObject obj = new fileObject();
obj.setFileId(key);
obj.setFileName(object.getString("filename"));
obj.setSize(size);
obj.setInfoToken(object.getString("infoToken"));
obj.setDeleteToken(object.getString("deleteToken"));
obj.setSha1(object.getString("sha1"));
obj.setFileType(filetype[1]);
objectList.add(obj);
}
}
final ListView lv1 = (ListView) findViewById(R.id.listobjects);
lv1.setAdapter(new fileObjectAdapter(this, objectList));
lv1.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> a, View v, int position, long id) {
Object o = lv1.getItemAtPosition(position);
fileObject fullObject = (fileObject) o;
Log.d("log_tag", "Filename: " + fullObject.getFileName());
httpurl = "http://bayfiles.net/file/" + fullObject.getFileId() + "/" + fullObject.getInfoToken() + "/" + fullObject.getFileName();
}
});
lv1.setOnItemLongClickListener(new OnItemLongClickListener() {
public boolean onItemLongClick(AdapterView<?> arg0, View arg1, int position, long id) {
registerForContextMenu(lv1);
openContextMenu(lv1);
Object o = lv1.getItemAtPosition(position);
fileObject fullObject = (fileObject) o;
httpurl = "http://api.bayfiles.net/v1/file/delete/" + fullObject.getFileId() + "/" + fullObject.getDeleteToken();
return true;
}
});
}
catch(Exception e)
{
e.printStackTrace();
Log.d("log_tag", "Error: " + e.toString());
}
}
}
还有我的adaper:
public class fileObjectAdapter extends BaseAdapter {
private static ArrayList<fileObject> searchArrayList;
private LayoutInflater mInflater;
public fileObjectAdapter(Context context, ArrayList<fileObject> results) {
searchArrayList = results;
mInflater = LayoutInflater.from(context);
}
public int getCount() {
return searchArrayList.size();
}
public Object getItem(int position) {
return searchArrayList.get(position);
}
public long getItemId(int position) {
return position;
}
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder;
if (convertView == null) {
convertView = mInflater.inflate(R.layout.dbitems, null);
holder = new ViewHolder();
holder.txtFileName = (TextView) convertView.findViewById(R.id.size);
holder.txtSize = (TextView) convertView.findViewById(R.id.filename);
holder.imgIcon = (ImageView) convertView.findViewById(R.id.typeimg);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
holder.txtFileName.setText(searchArrayList.get(position).getFileName());
holder.txtSize.setText(searchArrayList.get(position).getSize());
//holder.imgIcon.setImageResource(SET DRAWABLE ACCORDING TO ENDING);
return convertView;
}
static class ViewHolder {
TextView txtFileName;
TextView txtSize;
ImageView imgIcon;
}
public void filter(String charText) {
charText = charText.toLowerCase(Locale.getDefault());
searchArrayList.clear();
if (charText.length() == 0) {
searchArrayList.addAll(searchArrayList);
}
else
{
for (fileObject wp : searchArrayList)
{
if (wp.getFileName().toLowerCase(Locale.getDefault()).contains(charText))
{
searchArrayList.add(wp);
}
}
}
notifyDataSetChanged();
}
}
公共类fileObjectAdapter扩展了BaseAdapter{
私有静态ArrayList searchArrayList;
私人停车场;
公共fileObjectAdapter(上下文、ArrayList结果){
searchArrayList=结果;
mInflater=LayoutInflater.from(上下文);
}
public int getCount(){
返回searchArrayList.size();
}
公共对象getItem(int位置){
返回searchArrayList.get(位置);
}
公共长getItemId(int位置){
返回位置;
}
公共视图getView(int位置、视图转换视图、视图组父视图){
视窗座;
if(convertView==null){
convertView=mInflater.flate(R.layout.dbitems,null);
holder=新的ViewHolder();
holder.txtFileName=(TextView)convertView.findViewById(R.id.size);
holder.txtSize=(TextView)convertView.findViewById(R.id.filename);
holder.imgIcon=(ImageView)convertView.findViewById(R.id.typeimg);
convertView.setTag(支架);
}否则{
holder=(ViewHolder)convertView.getTag();
}
holder.txtFileName.setText(searchArrayList.get(position.getFileName());
holder.txtSize.setText(searchArrayList.get(position.getSize());
//holder.imgIcon.setImageResource(根据结尾设置可绘制);
返回视图;
}
静态类视窗夹{
TextView txtFileName;
TextView-txtSize;
ImageView imgIcon;
}
公共空过滤器(字符串图表文本){
charText=charText.toLowerCase(Locale.getDefault());
searchArrayList.clear();
如果(ChartText.length()==0){
searchArrayList.addAll(searchArrayList);
}
其他的
{
对于(fileObject wp:searchArrayList)
{
if(wp.getFileName().toLowerCase(Locale.getDefault()).contains(charText))
{
searchArrayList.add(wp);
}
}
}
notifyDataSetChanged();
}
}
如你所见,我得到了完整的文件名,并将其分为两部分。文件名和扩展名。然后我会做一个if语句来检查它是哪个文件扩展名。然后我希望它根据文件扩展名更改列表项中的图标。如何做到这一点
非常感谢您的帮助 如果我误解了你的问题,我道歉。为了确定这一点,我已经讨论过几次了,但我的解决方案相对简单,而且由于您似乎知道自己在代码中做什么,所以我很惊讶您还没有得到这一点。所以,如果我误解了,我再次道歉 您需要在ImageView上设置可绘制资源。这很简单,但第一部分是,如果您希望在不同的屏幕分辨率下看起来不错,您需要在/res文件夹中有几个不同的版本。基本上,您需要将图像缩放到放置在相应文件夹中的不同分辨率。MDPI=1.0X,HDPI=1.5X,XHDPI=2.0X 假设您有一张图片要显示为.exe文件扩展名。您将以MDPI的基本72分辨率创建文件,然后为HDPI和XHDPI创建缩放版本。假设您将图片文件命名为exe_picture.png。您将在每个文件夹中放置名为exe_picture的相应文件。然后,您可以在adapters getView函数中以编程方式引用图像并将其放置在ImageView中(请注意,以下代码未经测试): 当然,从这里您可以简单地为您想要支持的所有文件类型链接else if语句
希望这有帮助!祝你好运。这里的
开关(文件类型)
太简单了吗?我这么认为是因为,我必须确定适配器中的图像。你可以在资源文件夹中预先制作图标,例如jpg\u图标、png\u图标等(然后你可以设置图像可绘制资源),或者你可以使用文本视图,根据图像类型动态设置文本。
public class fileObjectAdapter extends BaseAdapter {
private static ArrayList<fileObject> searchArrayList;
private LayoutInflater mInflater;
public fileObjectAdapter(Context context, ArrayList<fileObject> results) {
searchArrayList = results;
mInflater = LayoutInflater.from(context);
}
public int getCount() {
return searchArrayList.size();
}
public Object getItem(int position) {
return searchArrayList.get(position);
}
public long getItemId(int position) {
return position;
}
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder;
if (convertView == null) {
convertView = mInflater.inflate(R.layout.dbitems, null);
holder = new ViewHolder();
holder.txtFileName = (TextView) convertView.findViewById(R.id.size);
holder.txtSize = (TextView) convertView.findViewById(R.id.filename);
holder.imgIcon = (ImageView) convertView.findViewById(R.id.typeimg);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
holder.txtFileName.setText(searchArrayList.get(position).getFileName());
holder.txtSize.setText(searchArrayList.get(position).getSize());
//holder.imgIcon.setImageResource(SET DRAWABLE ACCORDING TO ENDING);
return convertView;
}
static class ViewHolder {
TextView txtFileName;
TextView txtSize;
ImageView imgIcon;
}
public void filter(String charText) {
charText = charText.toLowerCase(Locale.getDefault());
searchArrayList.clear();
if (charText.length() == 0) {
searchArrayList.addAll(searchArrayList);
}
else
{
for (fileObject wp : searchArrayList)
{
if (wp.getFileName().toLowerCase(Locale.getDefault()).contains(charText))
{
searchArrayList.add(wp);
}
}
}
notifyDataSetChanged();
}
}
holder.txtFileName.setText(searchArrayList.get(position).getFileName());
holder.txtSize.setText(searchArrayList.get(position).getSize());
String fileType = searchArrayList.get(position).getFileType();
int imageResID = 0;
if (fileType.equals("exe")) {
imageResID = R.drawable.exe_picture;
}
holder.imgIcon.setImageResource(imageResID);