gpt4 book ai didi

android - ListView 和自定义 ListView

转载 作者:搜寻专家 更新时间:2023-11-01 08:14:49 25 4
gpt4 key购买 nike

我需要有关如何更改下面的代码以使用我自己的 XML ListView 的帮助。我光标中的项目“标签”、“标题”和“描述”需要扩展到 xml 的 itemLabel、itemTitle 和 itemDiscription 中。任何帮助将不胜感激:我知道如何从一个简单的数组中做到这一点。我为从数据库中获取数据而创建的 Activity 效果很好——我只是不知道如何使用/显示带有多行的自定义 lisView。谢谢!

修订:我设法使用我自己的自定义 XML 文件从数据库中获取要显示的数据。我现在遇到的问题是每个 TextView 中都返回了所有三列。即:数据库中的“标题”、“标签”、“描述”列全部膨胀为单个 TextView 作为一条连续线。我不知道如何将它分解成正确的 TextView; title = R.id.listTitle,label = R.id.label,description 应该膨胀成 R.id.caption。帮助!

ListView Activity :(已修订):

public class List_AC extends ListActivity {

private ArrayList<String> results = new ArrayList<String>();

File dbfile = new File("/mnt/sdcard/XXX/XXX/dB/XXX.db");
SQLiteDatabase db = SQLiteDatabase.openOrCreateDatabase(dbfile, null);

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);

openAndQueryDatabase();
displayResultList();
}

private void displayResultList() {
AC_Adapter adapter = new AC_Adapter(getApplicationContext(),R.layout.list_item, results, results, results);
setListAdapter(adapter);
}

private void openAndQueryDatabase() {
try {
Cursor c = db.rawQuery("SELECT label, title, discription FROM AC_list", null);
if (c != null) {
if (c.moveToFirst()) {
do {
String i1 = c.getString(c.getColumnIndex("label"));
String i2 = c.getString(c.getColumnIndex("title"));
String i3 = c.getString(c.getColumnIndex("discription"));
results.add(i1 + i2 + i3);
} while (c.moveToNext());
}
}
} catch (SQLiteException se) {
Log.e(getClass().getSimpleName(),
"Could not create or Open the database");
} finally {
if (db != null)
db.close();
}
}

添加适配器(AC_Adapter.java):

public class AC_Adapter extends ArrayAdapter<String> {
static List<String> Title = new ArrayList<String>();
static List<String> Label = new ArrayList<String>();
static List<String> Description = new ArrayList<String>();

Context myContext;

public AC_Adapter (Context context, int resource, List<String> aTitle, List<String> aLabel, List<String> aDescription){

super(context, resource, aTitle);

myContext = context;
Title= aTitle;
Label= aLabel;
Description = aDescription;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
View v = convertView;
if (v == null) {
LayoutInflater vi = (LayoutInflater) myContext
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
v = vi.inflate(R.layout.list_item, null);
}

TextView tv_label = (TextView) v.findViewById(R.id.label);
TextView tv_title = (TextView) v.findViewById(R.id.listTitle);
TextView tv_decription = (TextView) v.findViewById(R.id.caption);

if (tv_label != null) {
tv_label.setText(Label.get(position));
}
if (tv_title != null) {
tv_title.setText(Title.get(position));
}
if (tv_decription != null) {
tv_decription.setText(Description.get(position));
}

return v;

}

这是需要在 onCreate 中创建的 XML (list_view.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" >

<RelativeLayout
android:layout_width="fill_parent"
android:layout_height="30dip"
android:padding="4dip"
android:background="@drawable/gradient" >

<ImageButton
android:id="@+id/homeBtn"
android:src="@drawable/ic_menu_icon"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_alignParentLeft="true"
android:background="@null" />

<TextView
android:id="@+id/titleBarTitle"
android:layout_centerInParent="true"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:textSize="18sp" />

<ImageButton
android:id="@+id/toolBtn"
android:src="@drawable/ic_menu_list"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_alignParentRight="true"
android:background="@null" />

</RelativeLayout>

<ListView
android:id="@+id/listItems"
android:layout_height="wrap_content"
android:layout_width="fill_parent" />

</LinearLayout>

和列表项 (list_item.xml):

<?xml version="1.0" encoding="utf-8"?>

<TextView
android:id="@+id/itemLabel"
style="@style/listAcronym" />

<TextView
android:id="@+id/itemTitle"
style="@style/listTitle" />

<TextView
android:id="@+id/itemDiscription"
style="@style/listDiscription"/>

<ImageView
style="@style/listNextIcon" />

最佳答案

基本过程是创建一个包含布局 R.layout.list_item 的自定义适配器

因此,您替换此行 setListAdapter(new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1, results)); 在你的代码中 通过

setListAdapter(new CustomAdapter(this,R.layout.list_item, results));

现在您需要创建一个扩展 ArrayAdapter 或 BaseAdapter 的 CustomAdapter 并重写 getView 方法以膨胀 R.layout.list_item

请引用 Mark Murphy 的这篇优秀教程 Custom ListView Adapter

如果您在尝试此操作后还有任何其他疑问,请在此处发布。

关于android - ListView 和自定义 ListView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5781776/

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