gpt4 book ai didi

java - 如何在我的 GridView/ListView 适配器上动态填充 ImageView 和 TextView?

转载 作者:行者123 更新时间:2023-11-30 09:42:39 25 4
gpt4 key购买 nike

我正在开发我的第一个应用程序,但遇到了一些问题。那里有很多示例,但没有一个示例完全符合我的需要,而且我缺乏知识库来适应我所发现的内容。

我正在尝试创建一个 GridView/ListView,它在同一网格/列表行中显示 ImageView 和 TextView,并且图像和文本在滚动期间在该行上动态更新。列表中的每个网格/行都有不同的图像和文本(这些是从数组中填充的),我想确保在滚动过程中正确地重新使用行以保持应用程序的低内存。图像存储在 Res.Drawable 文件夹中。我正在尝试做的一个例子是 WOW Armory 应用程序的主屏幕。

我一直在看下面的例子,认为这是答案,但我不知道如何实现它:

http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/view/List14.html

我遇到的第一个问题是处理适配器中的 ImageView,下一部分是在适配器工作后设置 MainActivity。任何帮助将不胜感激,并在此先感谢您。这是我到目前为止的代码:

适配器:

import java.util.ArrayList;

import android.app.Activity;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;

public class MainButtonAdapter extends BaseAdapter {
private static ArrayList<MainButtonObject>arraylist;
private LayoutInflater mInflater;

public MainButtonAdapter(Context context, ArrayList<MainButtonObject>input) {
arraylist = input;
mInflater = LayoutInflater.from(context);
}

public int getCount() {
return arraylist.size();
}

public Object getItem(int position) {
return arraylist.get(position);
}

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

// create a new ImageView for each item referenced by the Adapter
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder;
if (convertView == null) {
convertView = mInflater.inflate(R.layout.main_button_layout, null);
holder = new ViewHolder();
holder.icon = (ImageView)convertView.findViewById(R.id.ImageViewButton);
holder.text = (TextView)convertView.findViewById(R.id.TextViewButton);
convertView.setTag(holder);

}
else {
holder = (ViewHolder)convertView.getTag();
}
holder.icon.setImageResource(arraylist.get(position).getIcon());
holder.text.setText(arraylist.get(position).getIcontxt());
return convertView;
}
static class ViewHolder {
ImageView icon;
TextView text;
}
}

对象:

public class MainButtonObject {
private String icon;
private String icontxt;

public MainButtonObject(String icon, String icontxt) {
this.icon = icon;
this.icontxt = icontxt;
}

public String getIcon() {
return icon;
}

public void setIcon(String icon) {
this.icon = icon;
}

public String getIcontxt() {
return icontxt;
}

public void setIcontxt(String icontxt) {
this.icontxt = icontxt;
}
}

字符串数组:

<?xml version="1.0" encoding="utf-8"?>
<resources>
<string-array name="item1">
<item>icon1.png</item>
<item>item 1</item>
</string-array>
<string-array name="item2">
<item>icon2.png</item>
<item>item 2</item>
</string-array>
<string-array name="item3">
<item>icon3.png</item>
<item>item 3</item>
</string-array>
<string-array name="item4">
<item>icon4.png</item>
<item>item 4</item>
</string-array>
</resources>

View 的标准布局:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
android:gravity="center_horizontal"
android:background="@drawable/background_main_button" >

<ImageView
android:id="@+id/ImageViewButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
</ImageView>
<TextView
android:id="@+id/TextViewButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingTop="2dp">
</TextView>
</LinearLayout>

最后是 MainActivity:

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.GridView;
import android.widget.Toast;


public class MainActivity extends Activity {
/** Called when the activity is first created. */

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

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

gridview.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
Toast.makeText(MainActivity.this, "" + position, Toast.LENGTH_SHORT).show();
}
});
}
}

最佳答案

从您的来源看来,您似乎有多个数组,每个数组都将图像映射到一些文本。你想要的基本上是一个 GridView ,用于在同一行显示图像和文本? GridView 可能不是最佳选择, ListView 可能是更好的选择。具有包含文本和 ImageView 的自定义行的 ListView 。

在您的代码中,我没有看到实际使用的数组,除非您故意将其遗漏。此外,您已经像这样初始化了适配器...

new MainButtonAdapter(this)

但是你的适配器接收一个 Context 和一个 ArrayList...

public MainButtonAdapter(Context context, ArrayList<MainButtonObject>input)

所以首先,我会将您的字符串数组放入对象中...

String[] item1 = getResources().getStringArray(R.array.item1);
String[] item2 = getResources().getStringArray(R.array.item2);
String[] item3 = getResources().getStringArray(R.array.item3);
String[] item4 = getResources().getStringArray(R.array.item4);

然后从这些数组创建一个 MainButtonObject...

MainButtonObject mbo1 = new MainButtonObject(item1[0],item1[1]);
MainButtonObject mbo2 = new MainButtonObject(item2[0],item2[1]);
MainButtonObject mbo3 = new MainButtonObject(item3[0],item3[1]);
MainButtonObject mbo4 = new MainButtonObject(item4[0],item4[1]);

然后将所有这些添加到 ArrayList...

ArrayList<MainButtonObject> list = new ArrayList<MainButtonObject>();
list.add(mbo1);
list.add(mbo2);
list.add(mbo3);
list.add(mbo4);

然后创建/设置你的适配器

gridview.setAdapter(new MainButtonAdapter(this,list));

在适配器中,我注意到你有...

holder.icon.setImageResource(arraylist.get(position).getIcon());

这是一个字符串,在这种情况下无效,因为 setImageResource() 接受一个整数,它是您要访问的资源的 ID:http://developer.android.com/reference/android/widget/ImageView.html#setImageResource(int)

因此图标需要位于您的 res/drawable 目录中,然后您可以通过 R.drawable.icon1 等访问它们。

我不知道这是否是您正在寻找的答案,但我确实希望它对您有所帮助:)

关于java - 如何在我的 GridView/ListView 适配器上动态填充 ImageView 和 TextView?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8556567/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com