У меня есть приложение с настраиваемым адаптером 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);
}
}
});