#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;
}
Спасибо
Дипак