Как применить разные значки и другой текст в руководстве по просмотру сетки Android?

#android #image #gridview #text #icons

#Android #изображение #просмотр сетки #текст #Значки

Вопрос:

Пожалуйста, расскажите мне о том, как изменить или применить разные значки с другим текстом в руководстве по просмотру сетки Android. Мой код

 public class Home extends Activity
{    
    //---the images to display---
    Integer[] imageIDs = {

    };

    GridView grid_main;

    @Override    
    public void onCreate(Bundle savedInstanceState) 
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        grid_main = (GridView) findViewById(R.id.gridview);
        grid_main.setAdapter(new ImageAdapter(this));

        grid_main.setOnItemClickListener(new OnItemClickListener() 
        {
            public void onItemClick(AdapterView<?> parent, 
            View v, int position, long id) 
            {                
                Toast.makeText(getBaseContext(), 
                        "pic"   (position   1)   " selected", 
                        Toast.LENGTH_SHORT).show();
            }
        });

    }

    public class ImageAdapter extends BaseAdapter 
    {
        Context mContext;
        public static final int ACTIVITY_CREATE = 10;
        public ImageAdapter(Context c) 
        {
            mContext = c;
        }

        //---returns the number of images---
        public int getCount() {
            return 12;
        }

        //---returns the ID of an item--- 
        public Object getItem(int position) {
            return position;
        }

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

        //---returns an ImageView view---
        public View getView(int position, View convertView, ViewGroup parent) 
        {

            View v;
            if(convertView==null){
                LayoutInflater li = getLayoutInflater();
                v = li.inflate(R.layout.grid_item, null);
                TextView tv = (TextView)v.findViewById(R.id.icon_text1);
                tv.setText("Profile " position);
                ImageView iv = (ImageView)v.findViewById(R.id.icon_image1);
                iv.setImageResource(R.drawable.bo_1);

            }
            else
            {
                v = convertView;
            }
            return v;
        }
    }    
}
  

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

Ответ №1:

Намного, намного, намного лучше для ImageAdapter является:

 public class ImageAdapter extends BaseAdapter {
        private Context mContext;

        public ImageAdapter(Context c) {
            mContext = c;
        }

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

        public Object getItem(int position) {
            return null;
        }

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

        // create a new ImageView for each item referenced by the Adapter
        public View getView(int position, View convertView, ViewGroup parent) {
            View v;
            if (convertView == null) {  // if it's not recycled, initialize some attributes
                LayoutInflater li = getLayoutInflater();
                v = li.inflate(R.layout.grid_item, null);
                TextView tv = (TextView)v.findViewById(R.id.icon_text);
                tv.setText(mTextsIds[position]);
                ImageView iv = (ImageView)v.findViewById(R.id.icon_image);
                iv.setImageResource(mThumbIds[position]);
            } else {
                v = (View) convertView;
            }
            return v;
        }

        // references to our images
        private Integer[] mThumbIds = {
                R.drawable.image1, R.drawable.image2,
                R.drawable.image3, R.drawable.image4
        };

        // references to our texts
        private String[] mTextsIds = {
                "Text 1", "Text 2", "Text 3", "Text 4"
        };
    }
  

Пожалуйста, обратите внимание, что изображения и тексты находятся в переменных mThumbIds и mTextsIds

The grid_item.xml является:

 <?xml version="1.0" encoding="UTF-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@ id/widget44"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:orientation="vertical"
    android:layout_x="201px"
    android:layout_y="165px"
    android:gravity="center_horizontal"
    >

        <ImageView
            android:id="@ id/icon_image"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
        />
        <TextView  
            android:id="@ id/icon_text"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="TextView"
            android:gravity="center_horizontal"
            android:textColorHighlight="#656565"
        />
</LinearLayout>
  

Ответ №2:

Две наиболее важные строки — это четыре:

 TextView tv = (TextView)v.findViewById(R.id.icon_text1);
tv.setText("Profile " position);
ImageView iv = (ImageView)v.findViewById(R.id.icon_image1);

if (position == 0) {
    iv.setImageResource(R.drawable.bo_1);
} else if (position == 1) {
    iv.setImageResource(R.drawable.bo_2);
}
  

В первой строке вы получаете TextView из файла XMLLayout. После этого вы устанавливаете текст этого TextView в «Профиль» и номер. В третьей строке вы инициализируете ImageView. После этого вы используете изображение с именем bo1 в этом ImageView. Итак, все, что вам нужно сделать, это добавить другой текст во вторую строку и изменить изображение, на которое вы ссылаетесь, в четвертой строке.

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

1. Нет, это работает не так, как вы предложили. Реализуя вашу логику, т. Е. добавляя другой текст во вторую строку и изменяя ссылку на изображение в четвертой строке, он изменяет изображение всех 12 значков, как я упоминал в методе getcount, на тот, на который я ссылался. На самом деле я хочу 12 разных значков с 12 разными текстами, и если я добавлю эти четыре строки снова, это увеличит no. из значков, и если я доведу количество до 1, тогда все в порядке, но значки отображаются вертикально onlyn из-за линейной компоновки в xml. Пожалуйста, помогите мне, это так срочно!

2. Кстати, спасибо, что помогли мне!

3. Ах, вы хотите изменить не просто изображение, а различные изображения… Тогда я бы добавил оператор switch, как я добавил в своем ответе.

4. @Roflcoptr Не могли бы вы, пожалуйста, уточнить вашу логику использования инструкции switch, чтобы я мог применить ее к своему коду!

5. @Roflcoptr Спасибо, сэр! Большое спасибо!! Это работает для меня, я действительно рад встретиться с вами здесь!! хорошо, и теперь, если я хочу сделать их интерактивными, что мне нужно сделать …??

Ответ №3:

Попробуйте использовать следующий код

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

            View v;
            ImageView iv = null;
            TextView tv = null;
            if(convertView==null){
                LayoutInflater li = getLayoutInflater();
                v = li.inflate(R.layout.grid_item, null);
                tv = (TextView)v.findViewById(R.id.icon_text1);
                tv.setText("Profile " position);
                iv = (ImageView)v.findViewById(R.id.icon_image1);


            }
            else
            {
                v = convertView;
            }
            iv.setImageResource(imageIDs[position]);
            return v;
        }
  

Спасибо
Дипак