处于ListView和适配器问题的十字路口。我们的想法是显示一个足球队列表,然后是他们得分的目标,以及他们在ListView中获得的分数,这些分数是使用Intent(作为数组)引入活动的。
但是,我只能显示分会名称,并且在显示包含得分和分数的整数数组方面存在问题。我环顾四周,找到了与自定义适配器相关的主题,但我是Android开发的新手,并不完全了解它们。
我尝试将整数数组转换为字符串但没有成功。我不知道从哪里去,所以欢迎任何建议。我的代码是:
package com.example.wmcpapersoccer;
import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.view.Menu;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.TextView;
public class ResultsActivity extends Activity
{
TextView txtShow;
TextView txtGF;
ListView listview;
String team_0;
String team_1;
String team_2;
String team_3;
String team_4;
String team_5;
String team_6;
String team_7;
int goalsFor_0 = 0;
int goalsFor_1 = 0;
int goalsFor_2 = 0;
int goalsFor_3 = 0;
int goalsFor_4 = 0;
int goalsFor_5 = 0;
int goalsFor_6 = 0;
int goalsFor_7 = 0;
int points_0 = 0;
int points_1 = 0;
int points_2 = 0;
int points_3 = 0;
int points_4 = 0;
int points_5 = 0;
int points_6 = 0;
int points_7 = 0;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_results);
Intent intent_team_data = getIntent();
String[] club_names = intent_team_data.getStringArrayExtra("footballClubs");
int[] team_points = intent_team_data.getIntArrayExtra("clubPoints");
int[] club_goals = intent_team_data.getIntArrayExtra("clubGoals");
listview = (ListView)findViewById(R.id.listClubs);
ArrayAdapter<String> myAdapter = new ArrayAdapter<String>(this, R.layout.custom_list_view, club_names);
listview.setAdapter(myAdapter);
}
@Override
public boolean onCreateOptionsMenu(Menu menu)
{
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.results, menu);
return true;
}
}
更新了custom_list_view xml
<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/listClubs"
android:layout_width="fill_parent"
android:layout_height="?android:attr/listPreferredItemHeight"
android:textAppearance="?android:attr/textAppearanceMedium"
android:gravity="center_vertical"
android:paddingLeft="6dip"
android:paddingRight="6dip"
android:textColor="#ffffff"
/>
答案 0 :(得分:1)
您需要创建一个扩展BaseAdapter
的适配器。
通过这种方式,您可以自定义ListView
item
的布局。
一个简单的例子是:
/** a custom Adapter */
public class MyAdapter extends BaseAdapter {
private LayoutInflater mInflater;
private List<Model> list;
public MyAdapter(Context context,List<Model> list) {
this.mInflater = LayoutInflater.from(context);
this.list = list;
}
@Override
public int getCount() {
return mData.size();// size of data
}
@Override
public Object getItem(int position) {
return list.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
convertView = mInflater.inflate(R.layout.list_item, null);//get your custom item layout
//get item's views.set the data
your code here.
return convertView;
}
}
答案 1 :(得分:1)
创建一个封装与单个团队相关的数据的对象更有意义 - 名称,得分,得分等等 - 而不是拥有必须单独协调和维护的多个不同阵列。
假设您有这样的对象,您可以轻松扩展ArrayAdapter并将其作为参数化类型(例如ArrayAdapter<TeamInfo>
)提供。或者,您可以通过扩展BaseAdapter来进一步编写自定义适配器实现。
我建议您观看The World of ListView,因为它将解释您在使用ListView和适配器时需要了解的所有内容。
答案 2 :(得分:1)
根据您的布局...您使用的是与Android默认提供的几乎相同的布局,但android:id
对于将文本从数组放置到视图中非常重要。
所以为了快速解决这个问题,我会直接使用Android布局并删除您的自定义布局。要使用默认布局,请将设置适配器行更改为以下内容:
ArrayAdapter<String> myAdapter = new ArrayAdapter<String>(this, android.R.simple_list_item_1, club_names);
android.R.simple_list_item_1
这是默认布局的路径。
如果您仍想使用布局,则需要将android:id
更改为
android:id="@android:id/text1"
希望这适合你。