2017-02-17 5 views
-1

Я хочу спросить, хочу ли я добавить изображения во время выполнения, как я могу это сделать? ... Я имею в виду, что у меня есть список стран, в которых есть имя и флаг given.I создать список (и установить в адаптере), но я не понимаю, как добавить изображение относительно своей страныКак установить изображение во время выполнения в android

enter code here 
package com.example.hp.myapplication; 

import android.net.Uri; 
import android.os.Bundle; 
import android.support.v7.app.AppCompatActivity; 
import android.view.View; 
import android.widget.AdapterView; 
import android.widget.ListView; 
import android.widget.Toast; 

import java.util.ArrayList; 
import java.util.List; 

public class MainActivity extends AppCompatActivity { 
    private ListView lvProduct; 
    private ProductListAdapter adapter; 
    private List<Country> mProductList; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 


     lvProduct = (ListView)findViewById(R.id.listview_product); 

     mProductList = new ArrayList<>(); 

     Uri path = Uri.parse("android.resource://"+this.getPackageName() + R.drawable.afghanistan); 
     String Path = path.toString(); 

     Uri path1 = Uri.parse("android.resource://"+this.getPackageName() + R.drawable.portugal); 
     String Path1 = path1.toString(); 

     //Add sample data for list 
     //We can get data from DB, webservice here 
     mProductList.add(new Country(1, "iPhone4", 200, "Apple iPhone4 16GB",Path)); 
     mProductList.add(new Country(3, "iPhone4S", 250, "Apple iPhone4S 16GB",Path1)); 
     mProductList.add(new Country(4, "iPhone5", 300, "Apple iPhone5 16GB",Path)); 
     mProductList.add(new Country(5, "iPhone5S", 350, "Apple iPhone5S 16GB",Path1)); 
     mProductList.add(new Country(6, "iPhone6", 400, "Apple iPhone6 16GB",Path)); 
     mProductList.add(new Country(7, "iPhone6S", 450, "Apple iPhone6S 16GB",Path1)); 
     mProductList.add(new Country(8, "iPhone7", 500, "Apple iPhone7 16GB",Path)); 
     mProductList.add(new Country(9, "iPhone7S", 600, "Apple iPhon7S 16GB",Path1)); 
     mProductList.add(new Country(10, "iPhone8", 700, "Apple iPhone8 16GB",Path)); 
     mProductList.add(new Country(11, "iPhone8S", 800, "Apple iPhone8S 16GB",Path1)); 

     //Init adapter 
     adapter = new ProductListAdapter(getApplicationContext(), mProductList); 
     lvProduct.setAdapter(adapter); 

     lvProduct.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
      @Override 
      public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
       //Do something 
       //Ex: display msg with product id get from view.getTag 
       Toast.makeText(getApplicationContext(), "Clicked product id =" + view.getTag(), Toast.LENGTH_SHORT).show(); 
      } 
     }); 
    } 
} 
enter code here 
package com.example.hp.myapplication; 

/** 
* Created by HP on 16-Feb-17. 
*/ 

import android.content.Context; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.BaseAdapter; 
import android.widget.ImageView; 
import android.widget.TextView; 

import java.util.List; 

public class ProductListAdapter extends BaseAdapter { 

    private Context mContext; 
    private LayoutInflater mInflater; 
    private List<Country> mProductList; 

    //Constructor 

    public ProductListAdapter(Context mContext, List<Country> mProductList) { 
     this.mContext = mContext; 
//  mProductList=new ArrayList<Country>(); 
     mInflater = LayoutInflater.from(mContext); 
     this.mProductList = mProductList; 
    } 

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

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

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

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) 
    { 

     ViewHolder holder; 
     Country p = mProductList.get(position); 
     if (convertView == null) { 
      convertView = mInflater.inflate(R.layout.list, null); 
      holder = new ViewHolder(); 
      holder.name = (TextView) convertView.findViewById(R.id.tv_name); 
      holder.price= (TextView) convertView.findViewById(R.id.tv_price); 
      holder.Description= (TextView) convertView.findViewById(R.id.tv_description); 
      holder.img= (ImageView) convertView.findViewById(R.id.IMAGE); 
      convertView.setTag(holder); 
     } else { 
      holder = (ViewHolder) convertView.getTag(); 
     } 
     int number=p.getPrice(); 
     String numberAsString = Integer.toString(number); 


     holder.name.setText(p.getName()); 
     holder.price.setText(numberAsString); 
     holder.Description.setText(p.getDescription()); 
     holder.img.setImageResource(R.drawable.spain); 
     return convertView; 

    } 
    static class ViewHolder 
    { 
     TextView name; 
     TextView price; 
     TextView Description; 
     ImageView img; 
    } 

} 
enter code here 
package com.example.hp.myapplication; 

/** 
* Created by HP on 16-Feb-17. 
*/ 
public class Country { 
    private int id; 
    private String name; 
    private int price; 
    private String description; 
    private String ImageUri; 


    //Constructor 

    public Country(int id, String name, int price, String description,String uri) 
    { 
     this.id = id; 
     this.name = name; 
     this.price = price; 
     this.description = description; 
     this.ImageUri=uri; 
    } 

    //Setter, getter 

    public int getId() { 
     return id; 
    } 

    public void setId(int id) { 
     this.id = id; 
    } 

    public String getName() { 
     return name; 
    } 

    public void setName(String name) { 
     this.name = name; 
    } 

    public int getPrice() { 
     return price; 
    } 

    public void setPrice(int price) { 
     this.price = price; 
    } 

    public String getDescription() { 
     return description; 
    } 

    public void setDescription(String description) { 
     this.description = description; 
    } 

    public String getImage() 
    { 
     return ImageUri; 
    } 

} 
+0

Вы всегда устанавливаете R.drawable.spain как доступные. Это может быть проблемой ...? – FlanschiFox

+0

Yup Я знаю это, но как изменить его на желаемый результат? –

ответ

1

самых простых решений может быть, чтобы добавить идентификатор ресурса в классе страны:

mProductList.add(new Country(11, "iPhone8S", 800, "Apple iPhone8S 16GB",R.drawable.portugal)); 

public Country(int id, String name, int price, String description,id resId){ 
    ... 
    this.resId=resId; 
} 

public String getResId(){ 
    return resId; 
} 

@Override 
public View getView(int position, View convertView, ViewGroup parent){ 

    ViewHolder holder; 
    Country p = mProductList.get(position); 
    .... 
    holder.img.setImageResource(p.getResId); 
    return convertView; 
} 
+0

Что такое «id resId»? В параметрах –

+0

Идентификатор ресурса. Например, R.drawable.portugal. Просто передайте этот идентификатор своему классу страны и используйте его в getview – FlanschiFox

0

Как пояснил FierceFox, вы установили следующее изображение для каждого элемента:

holder.img.setImageResource(R.drawable.spain);

То, что вы хотите, а не устанавливает имидж страны.

holder.img.setImageResource(country.getDrawableId());

Вы должны полностью удалить URI здесь:

mProductList.add(new Country(1, "iPhone4", 200, "Apple iPhone4 16GB",Path)); 

и заменить его на вытяжке ID:

mProductList.add(new Country(1, "iPhone4", 200, "Apple iPhone4 16GB", R.drawable.portugal)); 

Я не знаю, что вы пытаетесь сделайте с этим URI, как вы можете видеть setImageResource принимает @DrawableRes int, то есть вы должны просто дать ему идентификатор ресурса, не нужно хранить какие-либо URI.

1

Здесь я рассказываю шаги с основами.

  • Прежде всего, вы должны поместить все PNG/JPG файлы в вытяжке папку, которая находится в папке Реза в главном проекте иерархии.
  • Теперь в вашем объекте Country просто добавьте еще один параметр для идентификатора ресурса, например.

    MyCountryClass {

    int countryCode; 
    String countryName; 
    int countryResId; 
    
    } 
    

Теперь на адаптере, как сделать таким образом.

@Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     MyViewHolder mViewHolder; 

     if (convertView == null) { 
      convertView = inflater.inflate(R.layout.layout_country_list_item, parent, false); 
      mViewHolder = new MyViewHolder(convertView); 
      convertView.setTag(mViewHolder); 
     } else { 
      mViewHolder = (MyViewHolder) convertView.getTag(); 
     } 

     ListData countryListData = getItem(position); 

     mViewHolder.tvCountryName.setText(countryListData.getCountryName()); 
     mViewHolder.IVDesc.setImageResource(R.id.my_country_name); 

     return convertView; 
    } 

Теперь в классе активности просто подготовьте свой список и установите адаптер со списком.

Смежные вопросы