Absolute position in the base GrivView adapter

I am trying to write a BaseAdapter in my GrivView , but in

 public View getView(int position, View convertView, ViewGroup parent) { ... } 

position when rendering the following elements:

 visible elements --------------- | 1 2 3 | | 4 5 6 | <--- screen | 7 8 9 | --------------- nonvisible elements | 1 2 3 | <-- below visible area | 4 5 6 | 

where real:

 visible elements --------------- | 1 2 3 | | 4 5 6 | | 7 8 9 | --------------- nonvisible elements | 10 11 12 | | 13 14 15 | 

I know its correct behavior (it takes into account only visible elements), but how to get the real position of an element in the list? Or how do I know which layout I should return?

EDIT . However, the return number is much more random than I showed, even on the screen.

+4
source share
1 answer

Using the BaseAdapter just like the Google Documentatnion shows, is working fine.

My problem :

  • NOT using ViewHolder

  • or trying to hold id in viewHolder

I should use ViewHolder as follows:

 public View getView(int position, View convertView, ViewGroup parent) { // create holder ViewHolder holder; // check if layout exists if (convertView == null) { // if it not recycled, initialize some LayoutInflater inflater = LayoutInflater.from(mContext); convertView = (LinearLayout) inflater.inflate(R.layout.card_prev, null); // Create layout elements ImageView image = (ImageView) convertView .findViewById(R.id.imageViewThumbnail); TextView desc = (TextView) convertView .findViewById(R.id.textViewDescription); // Place layout elements in holder holder = new ViewHolder(); holder.id = position; holder.preview = image; holder.text = desc; convertView.setTag(holder); } else { // Get existing holder holder = (ViewHolder) convertView.getTag(); } // Update layout here using layout elements from holder String imageName = "image_" + (position + 1); final int imageId = mContext.getResources().getIdentifier(imageName, "drawable", "com.myapp"); holder.text.setText("" + (position+1)); holder.preview.setImageResource(imageId); holder.preview.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { Intent fullScreenIntent = new Intent(v.getContext(), FullScreenImage.class); fullScreenIntent.putExtra("imageRes", imageId); MainMenuActivity.currentShownActivity .startActivity(fullScreenIntent); } }); return convertView; } 
+1
source

Source: https://habr.com/ru/post/1383692/


All Articles