Android 列表视图数据始终覆盖在第一个列表项中
我正在开发一个简单的列表视图,每个列表项中都有一个图像、文本和图像 但数据始终仅在第一个列表项中被覆盖 这是我的密码Android 列表视图数据始终覆盖在第一个列表项中,android,Android,我正在开发一个简单的列表视图,每个列表项中都有一个图像、文本和图像 但数据始终仅在第一个列表项中被覆盖 这是我的密码 protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); listview = (ListView) findViewById(R.id.apps_list)
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
listview = (ListView) findViewById(R.id.apps_list);
am = (ActivityManager) this.getSystemService(this.ACTIVITY_SERVICE);
lv = am.getRunningTasks(Integer.MAX_VALUE);
// Actually this should be in timer
new RetriveStock().execute();
}
//异步任务
public class RetriveStock extends AsyncTask<Void, Void, Void> {
@Override
protected Void doInBackground(Void... params) {
updateList();
return null;
}
@Override
protected void onCancelled() {
super.onCancelled();
}
@Override
protected void onPostExecute(Void result) {
runOnUiThread(new Runnable() {
@Override
public void run() {
listview.invalidateViews();
listview.setAdapter(adb);
adb.notifyDataSetChanged();
listview.requestLayout();
}
});
super.onPostExecute(result);
}
@Override
protected void onPreExecute() {
super.onPreExecute();
}
@Override
protected void onProgressUpdate(Void... values) {
super.onProgressUpdate(values);
}
}
public void updateList() {
adb = new ArrayAdapter<RunningTaskInfo>(MainActivity.this,
R.layout.app_list, lv) {
@Override
public View getView(final int position, View convertView,
ViewGroup parent) {
View view = convertView;
try {
if (null == view) {
LayoutInflater vi = (LayoutInflater) MainActivity.this
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
view = vi.inflate(R.layout.app_list, null);
}
TextView appName = (TextView) findViewById(R.id.appName);
ImageView icon = (ImageView) findViewById(R.id.icon);
ImageButton close = (ImageButton) findViewById(R.id.close);
RunningTaskInfo app = lv.get(position);
ApplicationInfo ai = new ApplicationInfo();
PackageManager pm = getApplicationContext()
.getPackageManager();
try {
ai = pm.getApplicationInfo(
app.baseActivity.getPackageName(), 0);
} catch (NameNotFoundException e) {
e.printStackTrace();
}
final String applicationName = (String) (ai != null ? pm
.getApplicationLabel(ai) : "(unknown)");
appName.setText(applicationName);
icon.setImageDrawable(pm.getApplicationIcon(ai));
} catch (Exception e) {
e.printStackTrace();
}
return view;
}
};
}
public类RetriveStock扩展异步任务{
@凌驾
受保护的Void doInBackground(Void…参数){
updateList();
返回null;
}
@凌驾
受保护的void onCancelled(){
super.onCancelled();
}
@凌驾
受保护的void onPostExecute(void结果){
runOnUiThread(新的Runnable(){
@凌驾
公开募捐{
listview.invalidateViews();
setAdapter(adb);
adb.notifyDataSetChanged();
requestLayout();
}
});
super.onPostExecute(结果);
}
@凌驾
受保护的void onPreExecute(){
super.onPreExecute();
}
@凌驾
受保护的void onProgressUpdate(void…值){
super.onProgressUpdate(值);
}
}
公共void updateList(){
adb=新阵列适配器(MainActivity.this,
R.layout.app_列表,lv){
@凌驾
公共视图getView(最终整型位置,视图转换视图,
视图组(父级){
视图=转换视图;
试一试{
if(null==视图){
LayoutFlater vi=(LayoutFlater)MainActivity.this
.getSystemService(上下文布局\充气机\服务);
视图=vi.充气(R.layout.app_列表,空);
}
TextView appName=(TextView)findViewById(R.id.appName);
ImageView图标=(ImageView)findViewById(R.id.icon);
ImageButton close=(ImageButton)findViewById(R.id.close);
RunningTaskInfo应用程序=lv.get(位置);
ApplicationInfo ai=新的ApplicationInfo();
PackageManager pm=getApplicationContext()
.getPackageManager();
试一试{
ai=pm.getApplicationInfo(
app.baseActivity.getPackageName(),0);
}catch(nameNotFounde异常){
e、 printStackTrace();
}
最终字符串applicationName=(字符串)(ai!=null?pm
.getApplicationLabel(ai):“(未知)”;
appName.setText(applicationName);
icon.setImageDrawable(pm.getApplicationCon(ai));
}捕获(例外e){
e、 printStackTrace();
}
返回视图;
}
};
}
//屏幕截图如下。请帮忙
更改此选项:
TextView appName = (TextView) findViewById(R.id.appName);
到
适用于所有其他适配器。您正在使用哪个适配器???你能发布它的代码吗?我正在使用数组适配器。请参阅updateList()。其他重写方法(如getItem、getCount等)在哪里?数组适配器的意思是,u hv到数据数组到适配器到表单列表。它将基于getCount方法运行。。
TextView appName = (TextView)view. findViewById(R.id.appName);