Получить идентификатор представления в GridView

#android #gridview #cursor #onitemclicklistener

#Android #gridview #android-курсор #onitemclicklistener

Вопрос:

Что я пробовал


Привет, ребята, сначала я создал базу данных, которую я заполнил 3 столбцами, RowID, ImageID, text.После этого я создал GridView, который, если заполнить мою базу данных. Теперь я создал onItemClickListner, в котором я хотел бы получить идентификатор изображения над позицией. После этого я просматриваю свою DB-таблицу после этого ImageID, чтобы получить текст. Этот материал мне нужно сохранить в моей другой таблице. Проблема в том, что я думаю, что я не получаю ImageID, и, как этот serach, ничего в БД, если вы посмотрите на Logcat, вы увидите, что он равен null, так что, вероятно, он не получил ImageID, или я ищу в своем адаптере DB не так, как должен.

Вопрос


IMPORTRANT: я, наконец, получаю идентификатор представления thx в FuzzialLogic, но все еще есть проблема, я не могу получить строку над своим курсором. Пожалуйста, взгляните на это!


РАБОТАЕТ:

Что мне нужно изменить в моем коде, чтобы я мог получить идентификатор изображения, на которое нажал пользователь. После этого я хотел бы выполнить поиск в своей базе данных с этим идентификатором изображения, чтобы получить текст, который я сохранил вместе с изображением. Впоследствии этот материал попадает в мою другую таблицу.

Здесь внизу вы видите код и LogCat-Log. Я также добавил свой DatabaseAdapter, если кому-то это нужно. Заранее спасибо за вашу помощь!

Код


SFilterConfigActivity.class:

     package de.retowaelchli.filterit;

import java.util.ArrayList;

import android.app.Activity;
import android.content.Intent;
import android.database.Cursor;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.EditText;
import android.widget.GridView;
import android.widget.Toast;
import android.*;

import de.retowaelchli.filterit.database.SmileyDBAdapter;
import de.retowaelchli.filterit.database.SFilterDBAdapter;
import de.retowaelchli.filterit.stats.ImageAdapter;




public class SFilterConfigActivity extends Activity {
    
    //Variablen deklarieren
    private String name;
    private String keyword;
    private String smiley;
    private String text;
    
    private String source;
    private Integer[] info;
    
    private SmileyDBAdapter SmileyHelper;
    private SFilterDBAdapter mDbHelper;
    
    
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.sfilter_config);
    
      SmileyHelper = new SmileyDBAdapter(this);
      mDbHelper = new SFilterDBAdapter(this);
      
      getImages();
      grid();
    }


public void grid(){
    
    //Hier wird die GridView definiert und anschliesend über den ImageAdapter gefüllt
    final GridView gridview = (GridView) findViewById(R.id.SmileyGrind);
    gridview.setAdapter(new ImageAdapter(this, info));

    
    //Hier wird definiert was passiert wenn auf ein Bild in der GridView geklickt wird
    gridview.setOnItemClickListener(new OnItemClickListener(){
        
        public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
            Toast.makeText(SFilterConfigActivity.this, ""   position, Toast.LENGTH_SHORT).show();
           // gridview.setSelection(position);
           // Funktioniert noch nich Custom GridView Layout dafür erstellen siehe Stackoverflow
            if(position == gridview.getSelectedItemPosition()){
                v.setBackgroundColor(0xFF00FF00);
                
            }
            else{
                v.setBackgroundColor(0x0000000);
            }
            
            //Hier wird herrausgefunden welche ID das Bild hat und in den jeweiligen String gespeichert
            source = (new Long(id)).toString();
            
            SmileyHelper.open();
            Cursor c = SmileyHelper.getSmiley(source);
            startManagingCursor(c);

            if (c.moveToFirst()) { 
                do { 
                text = c.getString(c.getColumnIndex(SmileyDBAdapter.SOURCE)); 
                smiley = c.getString(c.getColumnIndex(SmileyDBAdapter.INFO)); 
                
                } while (c.moveToNext());
            SmileyHelper.close();
            

            }

        }
        
    });
}


public Integer[] getImages(){
    
    SmileyHelper.open();
    
    Cursor c = SmileyHelper.getAllSmileys();
    
    ArrayList<Integer> infoList = new ArrayList<Integer>();
    
    c.getColumnIndex(SmileyDBAdapter.INFO);
    int ColumnIndex = c.getColumnIndex(SmileyDBAdapter.INFO);
    
    if(c!=null)
    {
       
       while(c.moveToNext()){
           String infoItem = c.getString( ColumnIndex );
           infoList.add(Integer.parseInt(infoItem));
       }
    }


    info = infoList.toArray(new Integer[]{});

    c.close();
    
    
    SmileyHelper.close();
  
    
    return info;
    
}



public void onClickSConfigSave(View v){
    
    EditText edtTextName = (EditText)findViewById(R.id.SFConfigName);
    EditText edtTextKeyword = (EditText)findViewById(R.id.SFConfigKeyword);
    
    name = edtTextName.getText().toString();
    keyword = edtTextKeyword.getText().toString();
    
    mDbHelper.open();
    mDbHelper.createSFilter(name, keyword, smiley, text);
    mDbHelper.close();
    
    final Intent i = new Intent(this, SmileyActivity.class);
    startActivity(i);
    }
}
  

ImageAdapter.class

     package de.retowaelchli.filterit.stats;

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


//import de.retowaelchli.filterit.SFilterConfigActivity;

public class ImageAdapter extends BaseAdapter {
    
    // references to our images
    private Integer[] mThumbIds;
    private Context mContext;
    
    
    public ImageAdapter(Context c, Integer[] imageIds) {
        mContext = c;
        mThumbIds = imageIds;
        
    }
    
    

    public int getCount() {
       return mThumbIds.length;
    }

    public Object getItem(int position) {
        return mThumbIds[position];
    }

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

    // create a new ImageView for each item referenced by the Adapter
    public View getView(final int position, View convertView, ViewGroup parent) {
        ImageView imageView;
        if (convertView == null) {  // if it's not recycled, initialize some attributes
            imageView = new ImageView(mContext);
            imageView.setLayoutParams(new GridView.LayoutParams(85, 85));
            imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
            imageView.setPadding(8, 8, 8, 8);
        } else {
            imageView = (ImageView) convertView;
        }
        
        imageView.setId(mThumbIds[position]);
        
        imageView.setImageResource(mThumbIds[position]);
       
        
        
        
        return imageView;
        
        
        
        
    }
    
}
  

Like this I added the pictures with some text to the DB:

    private void angry(){
        
        int drawableID = context.getResources().getIdentifier("angry", "drawable", getPackageName());
        iv.setImageResource(drawableID);
        
        //String info = String.valueOf(drawableID);
        String info = String.valueOf(drawableID);
        
        mDbHelper.open();
        
        mDbHelper.createSmiley("You received a angry message", info);
        
        mDbHelper.close();
    }
  

Log-Cat


And here’s the Log:

 10-12 11:32:29.632: DEBUG/Database(25130): dbopen(): path = /data/data/de.retowaelchli.filterit/databases/filterit, flag = 6
10-12 11:32:29.632: DEBUG/Database(25130): dbopen(): path = /data/data/de.retowaelchli.filterit/databases/filterit, free size = 663
10-12 11:32:30.612: DEBUG/Database(25130): dbopen(): path = /data/data/de.retowaelchli.filterit/databases/filterit, flag = 6
10-12 11:32:30.612: DEBUG/Database(25130): dbopen(): path = /data/data/de.retowaelchli.filterit/databases/filterit, free size = 663
10-12 11:32:30.632: ERROR/Database(25130): Error inserting text=null smiley=null keyword=test name=test
10-12 11:32:30.632: ERROR/Database(25130): android.database.sqlite.SQLiteConstraintException: error code 19: constraint failed
10-12 11:32:30.632: ERROR/Database(25130):     at android.database.sqlite.SQLiteStatement.native_execute(Native Method)
10-12 11:32:30.632: ERROR/Database(25130):     at android.database.sqlite.SQLiteStatement.execute(SQLiteStatement.java:61)
10-12 11:32:30.632: ERROR/Database(25130):     at android.database.sqlite.SQLiteDatabase.insertWithOnConflict(SQLiteDatabase.java:1671)
10-12 11:32:30.632: ERROR/Database(25130):     at android.database.sqlite.SQLiteDatabase.insert(SQLiteDatabase.java:1515)
10-12 11:32:30.632: ERROR/Database(25130):     at de.retowaelchli.filterit.database.SFilterDBAdapter.createSFilter(SFilterDBAdapter.java:89)
10-12 11:32:30.632: ERROR/Database(25130):     at de.retowaelchli.filterit.SFilterConfigActivity.onClickSConfigSave(SFilterConfigActivity.java:143)
10-12 11:32:30.632: ERROR/Database(25130):     at java.lang.reflect.Method.invokeNative(Native Method)
10-12 11:32:30.632: ERROR/Database(25130):     at java.lang.reflect.Method.invoke(Method.java:507)
10-12 11:32:30.632: ERROR/Database(25130):     at android.view.View$1.onClick(View.java:2186)
10-12 11:32:30.632: ERROR/Database(25130):     at android.view.View.performClick(View.java:2532)
10-12 11:32:30.632: ERROR/Database(25130):     at android.view.View$PerformClick.run(View.java:9277)
10-12 11:32:30.632: ERROR/Database(25130):     at android.os.Handler.handleCallback(Handler.java:587)
10-12 11:32:30.632: ERROR/Database(25130):     at android.os.Handler.dispatchMessage(Handler.java:92)
10-12 11:32:30.632: ERROR/Database(25130):     at android.os.Looper.loop(Looper.java:143)
10-12 11:32:30.632: ERROR/Database(25130):     at android.app.ActivityThread.main(ActivityThread.java:4196)
10-12 11:32:30.632: ERROR/Database(25130):     at java.lang.reflect.Method.invokeNative(Native Method)
10-12 11:32:30.632: ERROR/Database(25130):     at java.lang.reflect.Method.invoke(Method.java:507)
10-12 11:32:30.632: ERROR/Database(25130):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
10-12 11:32:30.632: ERROR/Database(25130):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
10-12 11:32:30.632: ERROR/Database(25130):     at dalvik.system.NativeStart.main(Native Method)
  

Здесь вы найдете код моего адаптера SmileyDBAdapter.

SmileyDB

 package de.retowaelchli.filterit.database;

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;

public class SmileyDBAdapter {
    
        public static final String ROW_ID = "_id";
        public static final String SOURCE = "source";
        public static final String INFO = "info";

        private static final String DATABASE_TABLE = "smiley";

        private DatabaseHelper mDbHelper;
        private SQLiteDatabase mDb;

        private final Context mCtx;

        private static class DatabaseHelper extends SQLiteOpenHelper {

            DatabaseHelper(Context context) {
                super(context, DBAdapter.DATABASE_NAME, null, DBAdapter.DATABASE_VERSION);
            }

            @Override
            public void onCreate(SQLiteDatabase db) {
            }

            @Override
            public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
            }
        }

        /**
         * Constructor - takes the context to allow the database to be
         * opened/created
         * 
         * @param ctx
         *            the Context within which to work
         */
        public SmileyDBAdapter(Context ctx) {
            this.mCtx = ctx;
        }


        public SmileyDBAdapter open() throws SQLException {
            this.mDbHelper = new DatabaseHelper(this.mCtx);
            this.mDb = this.mDbHelper.getWritableDatabase();
            return this;
        }

        /**
         * close return type: void
         */
        public void close() {
            this.mDbHelper.close();
        }


        public long createSmiley(String source, String info ){
            ContentValues initialValues = new ContentValues();
            initialValues.put(SOURCE, source);
            initialValues.put(INFO, info);
            return this.mDb.insert(DATABASE_TABLE, null, initialValues);
        }


        public boolean deleteSmiley(long rowId) {

            return this.mDb.delete(DATABASE_TABLE, ROW_ID   "="   rowId, null) > 0;
        }

        public Cursor getAllSmileys() {

            return this.mDb.query(DATABASE_TABLE, new String[] { ROW_ID,
                    SOURCE, INFO }, null, null, null, null, null);
        }
        


        
        //Es wird nach der ID des smiley gesucht.
        public Cursor getSmiley(String info) throws SQLException {

            Cursor mCursor =

            this.mDb.query(true, DATABASE_TABLE, new String[] { ROW_ID, SOURCE,
                    INFO }, INFO   "="   info, null, null, null, null, null);
            if (mCursor != null) {
                mCursor.moveToFirst();
            }
            return mCursor;
        }


        public boolean updateSmiley(long rowId, String source, String info,
                String cache){
            ContentValues args = new ContentValues();
            args.put(SOURCE, source);
            args.put(INFO, info);

            return this.mDb.update(DATABASE_TABLE, args, ROW_ID   "="   rowId, null) >0; 
        }

    }
  

DBAdapter

 package de.retowaelchli.filterit.database;

import android.content.Context;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;

public class DBAdapter {

    public static final String DATABASE_NAME = "filterit";

    public static final int DATABASE_VERSION = 1;

    public static final String CREATE_TABLE_ADFILTER = "create table adfilter (_id integer primary key autoincrement, "
      ADFilterDBAdapter.NAME " not null ,"
      ADFilterDBAdapter.KEYWORD " not null ,"
      ADFilterDBAdapter.CACHE   " not null );";

    private static final String CREATE_TABLE_SFILTER = "create table sfilter (_id integer primary key autoincrement, "
     SFilterDBAdapter.NAME " not null ,"
     SFilterDBAdapter.KEYWORD " not null ,"
     SFilterDBAdapter.SMILEY  " not null ,"
     SFilterDBAdapter.TEXT  " not null );";

    private static final String CREATE_TABLE_ADMESSAGES = "create table admessages (_id integer primary key autoincrement, "
     MessagesDBAdapter.PHONENUMBER " not null ,"
     MessagesDBAdapter.MESSAGE  " not null );";

    
    private static final String CREATE_TABLE_SMILEY = " create table smiley (_id integer primary key autoincrement, "
     SmileyDBAdapter.SOURCE " not null ,"
     SmileyDBAdapter.INFO  " not null );";
    
    
    private final Context context; 
    private DatabaseHelper DBHelper;
    private SQLiteDatabase db;

    /**
     * Constructor
     * @param ctx
     */
    public DBAdapter(Context ctx)
    {
        this.context = ctx;
        
    }

    private static class DatabaseHelper extends SQLiteOpenHelper 
    {
        DatabaseHelper(Context context) 
        {
            super(context, DATABASE_NAME, null, DATABASE_VERSION);
        }

        @Override
        public void onCreate(SQLiteDatabase db) 
        {
            db.execSQL(CREATE_TABLE_ADFILTER);
            db.execSQL(CREATE_TABLE_SFILTER);
            db.execSQL(CREATE_TABLE_ADMESSAGES);
            db.execSQL(CREATE_TABLE_SMILEY);
        }

        @Override
        public void onUpgrade(SQLiteDatabase db, int oldVersion, 
        int newVersion) 
        {               
            // Adding any table mods to this guy here
        }
    } 

   /**
     * open the db
     * @return this
     * @throws SQLException
     * return type: DBAdapter
     */
    public DBAdapter open() throws SQLException 
    {
        this.DBHelper = new DatabaseHelper(this.context);
        this.db = this.DBHelper.getWritableDatabase();
        return this;
    }

    /**
     * close the db 
     * return type: void
     */
    public void close() 
    {
        this.DBHelper.close();
    }

}
  

Комментарии:

1. Эй, нечеткая логика, я бы хотел получить идентификатор представления (изображения) над позицией. Если вы глубже изучите мой DBAdapter, я добавлю таблицу после ImageID.

2. ОК. Я вижу, что вы пытаетесь здесь сделать. Я столкнулся с некоторыми похожими проблемами с несколькими различными типами адаптеров. Я нашел эффективное решение, но потребовалось немного повозиться. Позвольте мне посмотреть, смогу ли я найти решение. (PS Я всегда прошу разъяснений, даже если я прочитал код, потому что только потому, что код что-то ГОВОРИТ, не означает, что это то, чего человек пытается достичь. Спасибо за разъяснение!)

3. нет проблем! Здорово, что у вас есть что-то подобное, заранее спасибо за решение / помощь!

4. это не должно быть быстрым, оно просто должно работать 😉

5. Хорошо, после просмотра вашего редактирования ваша таблица не объявляет тип для ИСТОЧНИКА. Это означает, что он вставляется и считывается как все, что входит в as. Кроме того, в вашем журнале указано, что вставки нарушают ограничения. Это будет означать, что в этой таблице фактически нет никаких данных. Вы уверены, что в этой таблице есть данные? (т.Е. Вы пробовали запрос для всех строк?)

Ответ №1:

Safari,

Просмотрев ваш код и проанализировав, что может быть причиной ошибки, я заметил несколько вещей. Проблема в том, что ваш код пытается поменять местами rowID и ViewID, но на самом деле это не желаемое поведение.

В OnItemClick() , id аргумент ссылается на rowID . На самом деле у вас нет a rowID , который гарантированно (по коду) является уникальным, поэтому он терпит неудачу. Хотя вы могли бы «принудительно решить проблему» с помощью getItemId() , эта функция просто предоставляет указатель на объект (целое число). Игнорируйте getItemId() , поскольку это только причиняет вам боль. Вместо этого возьмите само представление и получите viewId его непосредственно из него, вот так:

Причина: source = v.getId().toString();
РЕДАКТИРОВАТЬ Поскольку в вашей ТАБЛИЦЕ не объявлен тип, он, скорее всего, вводится в виде строки. Мы знаем, что ImageID теперь возвращается, и мы знаем, что данные есть… Насколько я могу судить, это оставляет преобразование типов.

parent и view часто вызывают путаницу, особенно с запутанными вложенными макетами, такими как GridViews и ListViews . Однако ваш GridView довольно прост и v должен ссылаться на ImageView то, что там хранится. Если файл ImageView был сохранен в a LinearLayout или другом подобном родительском элементе, может возникнуть проблема, но для вас это не так.

Это позволит избежать необходимости беспокоиться о том getItemId(int position) , что, опять же, это относится rowId и работает только в том случае, если вы можете гарантировать Adapter определенные вещи, в частности, уникальные rowId для каждого элемента.

Во-вторых, для вашего viewId значения установлен указатель на Integer , а не само значение. An int является примитивом, поэтому назначение происходит так, как ожидалось. An Integer Object — это присвоение so, которое происходит с адресом объекта, а не с самим объектом. Я бы предложил изменить imageView.setId(mThumbIds[position]); (в вашем getView() ) на:

    imageView.setId(mThumbIds[position].intValue());
  

Это приведет к получению примитивного int значения вместо ссылки на Integer объект в памяти. Если в вашем коде не происходит что-то еще ошибочное (и я ничего не вижу сразу), это должно решить вашу проблему. setId предназначен для тихого сбоя, если id ему присвоено несоответствующее, поэтому он может не работать и просто не сообщать вам.

Наконец, я не вижу, какой тип поля является «ИСХОДНЫМ» в вашем коде. Он не показывает фактическое создание таблицы. Итак, дальнейшее угадывание вашей конкретной базы данных невозможно. Надеюсь, это поможет!

Что касается вашей базы данных, главное, что выделяется в вашей базе данных, — это ваша инструкция CREATE TABLE для вашей таблицы Simleys. В SQLite, если вы явно не назначаете тип, SQLite будет определять тип каждый раз, когда вы выполняете запрос, и возвращать тип в соответствии с тем, что, по его мнению, находится в поле. Это означает, что числа могут интерпретироваться как строка и наоборот. В целом, это может быть довольно надежно, однако это может привести к подводным камням.

Одна из самых больших проблем в коде заключается в предположении, что код делает то, что вы хотите. На самом деле, вы можете гарантировать это только в том случае, если вы точно скажете ему, что делать.

Во-вторых, я заметил, что когда вы получаете изображения для создания вашего Array для вашего ImageAdapter , вы выполняете запрос по INFO полю, а не по SOURCE . Это вводит в заблуждение в вашем коде, поскольку вы сообщаете onItemClick , что получаете SOURCE . Подумайте об изменении имени этой переменной.

Далее, возникает сбой при запросе INFO поля через getSmiley(String info) . В соответствии с вашими аргументами ожидается строка, а не целое число. Добавление a String к ContentValues объекту отличается от добавления целого числа. Добавляется String символ «A», окружающий его, отделяющий ‘1’ от 1. Это означает, что все ваши Integers данные были ВСТАВЛЕНЫ, когда String и когда вы запрашиваете, вы не включаете необходимые «. Поэтому рекомендуется внести ряд изменений.

  • Сначала настройте инструкцию CREATE TABLE.

    частная статическая конечная строка CREATE_TABLE_SMILEY = «создать таблицу смайликов (_id целое число первичный ключ автоинкремент, » SmileyDBAdapter.ИСТОЧНИК «not null», SmileyDBAdapter.ИНФОРМАЦИЯ » целое число не равно нулю );»;

Изменение инструкции таким образом гарантирует, что вы получаете целое число, а не строку.

  • Затем измените свой getImages() следующим образом: String infoItem = c.getString( ColumnIndex ); на int infoItem = c.getInt( ColumnIndex );

  • Затем измените свой createSmiley(String source, String info) на createSmiley(String source, int info) . Это должно корректно настроить все ваши вставки. Ваш ContentValues объект (именованный initialValues ) будет знать, что делать.

  • Затем измените свой getSmiley(String info) на getSmiley(int info) . Это также должно корректно настроить ваш запрос. Если этого не произойдет, измените ... "=" info ... на ... "=" info.toString() ... . Это вызовет проблему для вас.

  • Затем создайте onItemClick() соответствие, изменив эту строку source = v.getId().toString(); обратно на source = v.getId();

  • Наконец, вам нужно будет изменить любой из ваших вызовов на createSmiley() для отправки значения int, а не значения, преобразованного в строку.

Это много изменений (не совсем), которые нужно внести. Поэтому, пожалуйста, создайте резервные копии своих исходных файлов, прежде чем вносить эти изменения. Тогда остается только удалить пакет (в том числе из эмулятора, если он эмулируется) и переустановить его, чтобы он не сохранял исходные данные (со строками, а не целыми числами).

Нечеткая логика

Комментарии:

1. вот так здорово, что я получаю ImageID, но, похоже, при поиске в базе данных я не получаю необходимых значений… Мне нужно будет проверить это еще раз. Спасибо еще раз, если вы видите проблему в адаптере SmileyDBAdapter для поиска записи, пожалуйста, просто скажите мне .. : D спасибо!

2. Итак, теперь вы получаете ImageID, но он неправильно запрашивает базу данных? Я вас правильно понимаю? Если это так, можете ли вы показать мне инструкцию «СОЗДАТЬ ТАБЛИЦУ», которую вы используете для создания своей реальной таблицы? Это очень помогло бы.

3. Точно вы меня поняли! Я опубликую это завтра! Спасибо еще раз

4. вы нашли проблему !? пожалуйста, скажите «да» 🙂

5. Я приму ваш ответ, но, пожалуйста, найдите способ заставить эту маленькую часть работать, это было бы абсолютно ужасно ..!! Зеленая галочка для вас! Но, пожалуйста, найдите способ!

Ответ №2:

В вашем коде ImageAdapter.У вас переопределен метод getItemId, при котором вы возвращаете 0, что вызывает проблему.попробуйте вернуть mThumbIds[position] я думаю, это поможет вам.

приветствия.

Комментарии:

1. я изменил его на ту же ошибку. public long getItemId(int position) { return mThumbIds[position] ; }

2. @safari Я думаю, вам следует использовать для ‘public long getItemId (int position) { return position};

3. используйте source = (new Long(id)) . toString(); и общедоступный длинный getItemId(int position) { return position}; Может ли это работать?

4. owh не видел этот пост и ваш ответ, я попробую второй — не сработало, но все же спасибо, приятель, я попробую ваш другой ответ, но atm я не понимаю, где я должен вводить ваши кодовые строки

Ответ №3:

В классе ImageAdapter в методе getView добавьте следующую строку кода

 imageView.setId(mThumbIds[postion]);
  

или другой вариант находится в вашем Onclick прослушивателе gridview внутри метода on click

 source = (new Long(id)).toString();
  

замените эту строку кода на

 source = parent.getItemId(position);
  

Теперь это окончательно решит проблему.

Комментарии:

1. Привет, сначала я попробовал то, что вы сказали мне выше, после этого — не сработало, после этого я попробовал вторую вещь, которую вы мне сказали, но я не понимаю, как работает этот код … 🙁 source = parent.getItemId(position);

Ответ №4:

изменить

   if(c!=null)
    {

       while(c.moveToNext()){
           String infoItem = c.getString( ColumnIndex );
           infoList.add(Integer.parseInt(infoItem));
       }
    }
  

Для

 if(c!=null)
        {

           while(!c.isAfterLast()){
               String infoItem = c.getString( ColumnIndex );
               infoList.add(Integer.parseInt(infoItem));
               c.moveToNext();
           }
        }
  

Комментарии:

1. Я не понимаю, каким !isAfterLast должен быть этот метод.

2. когда происходит исключение?