java – Android ListView和ArrayAdapter / Arraylist
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java – Android ListView和ArrayAdapter / Arraylist,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含6633字,纯文字阅读大概需要10分钟。
内容图文
![java – Android ListView和ArrayAdapter / Arraylist](/upload/InfoBanner/zyjiaocheng/802/3f55bf6cf16a420bac50f6915f0f51c3.jpg)
我对Java / Android完全不熟悉并且坚持使用listviews.
我想要的是在listview中连续4行使用不同的字体样式
rowlayout.xml
<TextView
android:id="@+id/1"
android:visibility="gone"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<TextView
android:id="@+id/2"
android:textSize="30sp"
android:textStyle="bold"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<TextView
android:id="@+id/3"
android:typeface="sans"
android:textSize="20sp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<TextView
android:id="@+id/4"
android:typeface="sans"
android:textSize="15sp"
android:textStyle="italic"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
我在一个单独的xml文件中有这个
results.xml
<ListView
android:id="@android:id/list"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_below="@id/TitleLbl" >
</Listview>
我的数组适配器看起来像这样
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,R.layout.rowlayout, R.id.2, Array);
setListAdapter(adapter);
我要做的是获取一个arraylist(包含ID,名称,姓氏和数字)来填充列表视图,以便每个信息都在行中自己的行.
上面的数组适配器工作,但四个信息中的每一个都在它们自己的行中.
有人可以帮忙吗?
(另外,我已经在互联网上搜索并尝试对此进行排序,但似乎无法找到任何可以帮助我的东西)
解决方法:
您可能需要使用自定义阵列适配器的自定义列表视图.例如,请参阅此link .
内容:
Android HelloListView(http://developer.android.com/resources/tutorials/views/hello-listview.html)教程展示了如何将ListView绑定到一个字符串对象数组,但是你可能很快就会长大.本文将向您展示如何将ListView绑定到自定义对象的ArrayList,以及创建多行ListView.
假设您有某种搜索功能,可以返回人员列表以及地址和电话号码.我们将为每个结果以三个格式化的行显示该数据,并使其可单击.
首先,创建新的Android项目,并创建两个布局文件.默认情况下可能已经创建了Main.xml,因此将其粘贴到:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<TextView
android:layout_height="wrap_content"
android:text="Custom ListView Contents"
android:gravity="center_vertical|center_horizontal"
android:layout_width="fill_parent" />
<ListView
android:id="@+id/ListView01"
android:layout_height="wrap_content"
android:layout_width="fill_parent"/>
</LinearLayout>
接下来,创建一个名为custom_row_view.xml的布局文件.此布局将是ListView中每个单独行的模板.您可以使用几乎任何类型的布局 – 相对,表等,但为此我们只使用线性:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<TextView android:id="@+id/name"
android:textSize="14sp"
android:textStyle="bold"
android:textColor="#FFFF00"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<TextView android:id="@+id/cityState"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<TextView android:id="@+id/phone"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
</LinearLayout>
现在,添加一个名为SearchResults的对象.粘贴此代码:
public class SearchResults {
private String name = "";
private String cityState = "";
private String phone = "";
public void setName(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setCityState(String cityState) {
this.cityState = cityState;
}
public String getCityState() {
return cityState;
}
public void setPhone(String phone) {
this.phone = phone;
}
public String getPhone() {
return phone;
}
}
这是我们将填充数据并加载到ArrayList的类.
接下来,您需要一个自定义适配器.这个只是扩展了BaseAdapter,但如果您愿意,可以扩展ArrayAdapter.
public class MyCustomBaseAdapter extends BaseAdapter {
private static ArrayList<SearchResults> searchArrayList;
private LayoutInflater mInflater;
public MyCustomBaseAdapter(Context context, ArrayList<SearchResults> results) {
searchArrayList = results;
mInflater = LayoutInflater.from(context);
}
public int getCount() {
return searchArrayList.size();
}
public Object getItem(int position) {
return searchArrayList.get(position);
}
public long getItemId(int position) {
return position;
}
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder;
if (convertView == null) {
convertView = mInflater.inflate(R.layout.custom_row_view, null);
holder = new ViewHolder();
holder.txtName = (TextView) convertView.findViewById(R.id.name);
holder.txtCityState = (TextView) convertView.findViewById(R.id.cityState);
holder.txtPhone = (TextView) convertView.findViewById(R.id.phone);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
holder.txtName.setText(searchArrayList.get(position).getName());
holder.txtCityState.setText(searchArrayList.get(position).getCityState());
holder.txtPhone.setText(searchArrayList.get(position).getPhone());
return convertView;
}
static class ViewHolder {
TextView txtName;
TextView txtCityState;
TextView txtPhone;
}
}
(这与List14.java API演示基本相同)
最后,我们将它们连接到主类文件中:
public class CustomListView extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
ArrayList<SearchResults> searchResults = GetSearchResults();
final ListView lv1 = (ListView) findViewById(R.id.ListView01);
lv1.setAdapter(new MyCustomBaseAdapter(this, searchResults));
lv1.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> a, View v, int position, long id) {
Object o = lv1.getItemAtPosition(position);
SearchResults fullObject = (SearchResults)o;
Toast.makeText(ListViewBlogPost.this, "You have chosen: " + " " + fullObject.getName(), Toast.LENGTH_LONG).show();
}
});
}
private ArrayList<SearchResults> GetSearchResults(){
ArrayList<SearchResults> results = new ArrayList<SearchResults>();
SearchResults sr1 = new SearchResults();
sr1.setName("John Smith");
sr1.setCityState("Dallas, TX");
sr1.setPhone("214-555-1234");
results.add(sr1);
sr1 = new SearchResults();
sr1.setName("Jane Doe");
sr1.setCityState("Atlanta, GA");
sr1.setPhone("469-555-2587");
results.add(sr1);
sr1 = new SearchResults();
sr1.setName("Steve Young");
sr1.setCityState("Miami, FL");
sr1.setPhone("305-555-7895");
results.add(sr1);
sr1 = new SearchResults();
sr1.setName("Fred Jones");
sr1.setCityState("Las Vegas, NV");
sr1.setPhone("612-555-8214");
results.add(sr1);
return results;
}
}
请注意,我们首先获取SearchResults对象的ArrayList(通常这将来自外部数据源…),将其传递给自定义适配器,然后设置单击侦听器.侦听器获取被单击的项目,将其转换回SearchResults对象,并执行它需要执行的任何操作.
内容总结
以上是互联网集市为您收集整理的java – Android ListView和ArrayAdapter / Arraylist全部内容,希望文章能够帮你解决java – Android ListView和ArrayAdapter / Arraylist所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。