gpt4 book ai didi

Android:具有不同项目的 ListView 的 xml 布局

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:36:14 24 4
gpt4 key购买 nike

我正在阅读本教程 http://android.amberfog.com/?p=296 .我想创建一个包含不同类型行的 ListView 。我了解如何创建适配器,但是 xml 布局呢?所以我定义了一个像这样的 xml 布局:

<ListView/>

<TextView android:id="@+id/id1" />

<TextView android:id="@+id/id2" />

<ImageView android:id="@+id/id3" />

<TextView android:id="@+id/id4" />

如果一行仅使用布局的一些元素(仅一些 TextView )而另一行可能使用其他元素,这(对于性能)是否会成为问题?我不明白我的方法是否是定义 xml 的正确方法,或者我是否必须为每种类型的行创建不同的布局。

提前谢谢你

编辑:现在我有一个空点异常。

来自适配器的 java 代码:

@Override

public View getView(int position, View convertView, ViewGroup parent) {

ViewHolder holder = null;
int type = getItemViewType(position);

if (convertView == null) {
holder = new ViewHolder();

convertView = mInflater.inflate(R.layout.listview_main, null);
holder.textView_title = (TextView)convertView.findViewById(R.id.listview1);

convertView.setTag(holder);
} else {
holder = (ViewHolder)convertView.getTag();
}

**holder.textView_title.setText("aaaa");** //NULL POINT EXCEPTION HERE

return convertView;

class ViewHolder {
public TextView textView_title;
}

xml 1:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/main_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:gravity="left"
android:layout_margin="0dp">

<!-- android:background="#0094ff" -->

<ListView
android:id="@id/android:list"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:fastScrollEnabled="true"
android:scrollbarStyle="insideInset"
android:textFilterEnabled="false"
android:divider="@null"
android:layout_margin="0dp"
android:paddingTop="0dp"
android:paddingBottom="0dp"
android:paddingLeft="15dp"
android:paddingRight="22dp"/>



</LinearLayout>

xml2

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:gravity="left"
android:layout_margin="0dp">

<TextView
android:id="@+id/listview1"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:paddingTop="7dp"
android:paddingBottom="0dp"
android:paddingLeft="0dp"
android:paddingRight="0dp"
android:textSize="18sp"
android:textColor="#000000"
android:lines="1">
</TextView>

</LinearLayout>

最佳答案

您需要覆盖 getViewItemTypegetViewTypeCount。您还需要有自定义布局。

getItemViewType(int position) - 返回您应该根据位置使用哪种布局类型的信息。

您应该看看链接中的视频。

http://www.youtube.com/watch?v=wDBM6wVEO70

private static final int TYPE_ITEM1 = 0;
private static final int TYPE_ITEM2 = 1;
private static final int TYPE_ITEM3 = 2;

然后

int type;
@Override
public int getItemViewType(int position) {

if (position== 0){
type = TYPE_ITEM1;
} else if (position == 1){
type = TYPE_ITEM2;
}
else
{
type= TYPE_ITEM3 ;
}
return type;
}

@Override
public int getViewTypeCount() {
return 3;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View row = convertView;
LayoutInflater inflater = null;
int type = getItemViewType(position);
// instead of if else you can use a case
if (row == null) {
if (type == FIRST_TYPE) {
//infalte layout of type1
}
if (type == SECOND_TYPE) {
//infalte layout of type2
} else {
//infalte layout of normaltype
}
}

关于Android:具有不同项目的 ListView 的 xml 布局,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18868194/

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