Note that there are some explanatory texts on larger screens.

plurals
  1. PO
    primarykey
    data
    text
    <p>Ok, i don't know your code so i can't help you with a "more specific solution" but you can create an array of boolean</p> <pre><code>boolean[] status; </code></pre> <p>Every item have an id in the array. </p> <p>In the <code>getView()</code> method check if <code>status == true</code> put green image, red if false.</p> <p>It's how you can do it, if you post your code i can help you with a more efficent solution if possible. But it's the basic idea.</p> <p>Ah, if you use a class to put items in the ListView you can save his state as a field in the class.</p> <p>And <a href="http://www.youtube.com/watch?v=N6YdwzAvwOA" rel="nofollow"><strong>this video</strong></a> helped me a lot to understand how Android works with ListView</p> <p>Wow, ok your code is a bit messy around and i don't understand why you do somethings.. Anyway save the "yes|no" in the imagetag is not a great idea for me.. </p> <p>You can edit your "Product" class and add a field called "selected" something like:</p> <pre><code>class Product { public boolean userSelectedIt; } </code></pre> <p>Then edit your getView to something like this:</p> <pre><code>@Override public View getView(int position, View convertView, ViewGroup parent) { // используем созданные, но не используемые view View view = convertView; if (view == null) { view = lInflater.inflate(R.layout.item, parent, false); } Product p = getProduct(position); final int pos = position; final String name = p.name; final boolean selected = p.userSelectedIt; // заполняем View в пункте списка данными из класса продукт: наименование, картинка и тег(используется для детекта картинки) // и картинка ((TextView) view.findViewById(R.id.tvDescr)).setText(p.name); ((ImageView) view.findViewById(R.id.ivImage)).setImageResource(p.image); ((ImageView) view.findViewById(R.id.ivImage)).setTag(p.tag); iv = ((ImageView) view.findViewById(R.id.ivImage)); String temp = (String)iv.getTag(); //Получаю инфу, какая картинка у текущего элемента //Блок для определения какую картинку добавить в массив if (selected) iarr.add(new ImgArray(iv,pos,name,"yes")); else iarr.add(new ImgArray(iv,pos,name,"no")); //Обработчик нажатия на картинку iv.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { // Здесь можно писать в базу, в name содержится имя продукта по которому кликнули // // Log.d(LOG_TAG,"PRODUCT --- " + name); Log.d(LOG_TAG, "NAME ACTIVITY --- " + title); //Получаю картинку, которая была нажата LinearLayout ll = (LinearLayout) view.getParent(); ImageView iv = (ImageView) ll.getChildAt(0); //String bufferTag = (String) iv.getTag(); //Получаю данные, какая картинка была перед нажатием //Блок для определения, какая картинка пришла и на какую ее изменить selected = !selected; if (selected) { iv.setImageResource(R.drawable.no); iarr.set(pos,new ImgArray(iv,pos,name,"no")); //Заменяется картинка в массиве картинок. Замена происходит по позиции } else { iv.setImageResource(R.drawable.yes); iarr.set(pos,new ImgArray(iv,pos,name,"yes")); } } }); return view; } </code></pre> <p>Or, if you don't want to add a field to Product class you can edit your Adapter to look like this:</p> <pre><code>public class BoxAdapter extends BaseAdapter { Context ctx; LayoutInflater lInflater; ArrayList&lt;Product&gt; objects; ArrayList&lt;boolean&gt; userSelected; // Here i added a ArrayList of booleans to remember the user chooise String title; public ImageView iv; public int counter; public ArrayList&lt;ImgArray&gt; iarr = new ArrayList&lt;ImgArray&gt;(); public ArrayList&lt;ImgArray&gt; startIarr = new ArrayList&lt;ImgArray&gt;(); final String LOG_TAG = "myLogs"; BoxAdapter(Context context, ArrayList&lt;Product&gt; products, String curTitle) { ctx = context; objects = products; lInflater = (LayoutInflater) ctx .getSystemService(Context.LAYOUT_INFLATER_SERVICE); //Получаю название Activity title = curTitle; } // кол-во элементов @Override public int getCount() { return objects.size(); } // элемент по позиции @Override public Object getItem(int position) { return objects.get(position); } // id по позиции @Override public long getItemId(int position) { return position; } // пункт списка @Override public View getView(int position, View convertView, ViewGroup parent) { // используем созданные, но не используемые view View view = convertView; if (view == null) { view = lInflater.inflate(R.layout.item, parent, false); } Product p = getProduct(position); final int pos = position; final String name = p.name; final boolean selected = userSelected.get(position); // заполняем View в пункте списка данными из класса продукт: наименование, картинка и тег(используется для детекта картинки) // и картинка ((TextView) view.findViewById(R.id.tvDescr)).setText(p.name); ((ImageView) view.findViewById(R.id.ivImage)).setImageResource(p.image); ((ImageView) view.findViewById(R.id.ivImage)).setTag(p.tag); iv = ((ImageView) view.findViewById(R.id.ivImage)); //Блок для определения какую картинку добавить в массив if (selected) iarr.add(new ImgArray(iv,pos,name,"yes")); else iarr.add(new ImgArray(iv,pos,name,"no")); //Обработчик нажатия на картинку iv.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { // Здесь можно писать в базу, в name содержится имя продукта по которому кликнули // // Log.d(LOG_TAG,"PRODUCT --- " + name); Log.d(LOG_TAG, "NAME ACTIVITY --- " + title); //Получаю картинку, которая была нажата LinearLayout ll = (LinearLayout) view.getParent(); ImageView iv = (ImageView) ll.getChildAt(0); //String bufferTag = (String) iv.getTag(); //Получаю данные, какая картинка была перед нажатием //Блок для определения, какая картинка пришла и на какую ее изменить userSelected.set(position, !selected); if (!selected) { iv.setImageResource(R.drawable.no); iarr.set(pos,new ImgArray(iv,pos,name,"no")); //Заменяется картинка в массиве картинок. Замена происходит по позиции } else { iv.setImageResource(R.drawable.yes); iarr.set(pos,new ImgArray(iv,pos,name,"yes")); } } }); return view; } // товар по позиции Product getProduct(int position) { return ((Product) getItem(position)); } //Функция для возврата информации о количестве элементов в массиве картинок(не используется) public Object getV (View v,int position) { ListView lv = (ListView) v.findViewById(R.id.lvView); //Object o = lv.getItemAtPosition(position); Object o = iarr.size(); return o; } //Функция для возврата элемента картинок public ArrayList iFunc(){ return iarr; } //не используется public ArrayList sIarr(){ return startIarr; } //не используется public int C (View v) { ListView lv = (ListView) v.findViewById(R.id.lvView); return lv.getCount(); } } </code></pre> <p>(Yeah i know, the code looks horrible here due to indentation sorry.) This code should work, if not say and i try to fix it.</p>
    singulars
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. VO
      singulars
      1. This table or related slice is empty.
    2. VO
      singulars
      1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload