Расположение ошибки адаптера Gridview для Android Изменяется при прокрутке - PullRequest
0 голосов
/ 03 октября 2018

У меня есть приложение с настраиваемым адаптером gridview, который надувает изображение и строку, изображение надувается с помощью массива строк, который содержит путь к файлу изображения из ExternalFilesStorage.

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

Вот коды дляпользовательский адаптер:

 public class PTSCustomGridView extends BaseAdapter{

    private Context mContext;
    private final String[] pictureNameArray;
    private final String[] picturePathArray;

    public PTSCustomGridView(Context context, String[] pictureNameArray, String[] picturePathArray) {
        mContext = context;
        this.pictureNameArray = pictureNameArray;
        this.picturePathArray = picturePathArray;
    }

    @Override
    public int getCount() {
        return pictureNameArray.length;
    }

    @Override
    public Object getItem(int i) {
        return null;
    }

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

    @Override
    public View getView(int i, View convertView, ViewGroup parent) {
        View gridViewAndroid;
        LayoutInflater inflater = (LayoutInflater) mContext
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);

        if (convertView == null) {

            gridViewAndroid = new View(mContext);
            gridViewAndroid = inflater.inflate(R.layout.custom_gridview, null);
            TextView textViewAndroid = (TextView) gridViewAndroid.findViewById(R.id.android_gridview_text);
            ImageView imageViewAndroid = (ImageView) gridViewAndroid.findViewById(R.id.android_gridview_image);
            textViewAndroid.setText(pictureNameArray[i]);
            //set Image from file path
            File imgFile = new File(picturePathArray[i]);
            if(imgFile.exists()){
                Bitmap myBitmap = BitmapFactory.decodeFile(imgFile.getAbsolutePath());
                //ImageView myImage = (ImageView) findViewById(R.id.imageviewTest);
                imageViewAndroid.setImageBitmap(myBitmap);
            }
        } else {
            gridViewAndroid = (View) convertView;
        }

        return gridViewAndroid;
    }
}

Вот коды для onClickListener:

PTSCustomGridView adapterViewAndroid = new PTSCustomGridView(PictureToSpeechActivity.this, pictureNameArray, picturePathArray);
        androidGridView=(GridView)findViewById(R.id.PTSGridView);
        androidGridView.setAdapter(adapterViewAndroid);
        androidGridView.setOnItemClickListener(new AdapterView.OnItemClickListener() {

            @Override
            public void onItemClick(AdapterView<?> parent, View view,
                                    int i, long id) {
                //Toast.makeText(PictureToSpeechActivity.this, "GridView Item: " + gridViewString[+i], Toast.LENGTH_SHORT).show();
                if(result == TextToSpeech.LANG_MISSING_DATA || result == TextToSpeech.LANG_NOT_SUPPORTED){
                    Toast.makeText(PictureToSpeechActivity.this, "Feature not supported on your device", Toast.LENGTH_LONG).show();
                }
                else{
                    pitch = sharedPref.getFloat("pitch", 1);
                    speed = sharedPref.getFloat("speed", 1);
                    language = sharedPref.getString("language", "UK");
                    text = pictureNameArray[i];
                    ettext.setText(text);
                    TTS.setPitch(pitch);
                    TTS.setSpeechRate(speed);
                    ttsLanguage();
                    TTS.speak(text,TextToSpeech.QUEUE_FLUSH, null,null);
                }
            }
        });
...