gpt4 book ai didi

java - 从光标填充 ListView

转载 作者:行者123 更新时间:2023-12-01 15:54:35 25 4
gpt4 key购买 nike

我在这里看了很长一段时间,但找不到我的问题的答案。类似的问题还有很多。但我一直无法想出任何有效的解决方案。我对 android/java 编程非常陌生,所以我非常感谢任何帮助。

背景:我有一个包含 2 个 ListView 的 Activity 屏幕。第一个 ListView 包含来自数据库的名称列表。 (这工作正常)。

然后,当用户单击列表中的某个名称时,将触发 onItemClick 事件,并根据与该名称关联的所有数据构建光标。 (已验证我得到的光标具有有效结果)。

问题:当我尝试将生成的光标放入 SimpleCursorAdapter 中以设置我的 listadpter 时,我没有收到任何错误,但屏幕上没有显示任何内容。

我有来自 SQLite 数据库的数据。它只是 4 列和 X 行。我想做的就是显示列表上的所有内容,然后也许做一些分析。

这是我的代码:

public class TipCalculator_w_Database extends Activity    {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.databaseinfoscreen);

ListView lv1 = null;
lv1 = (ListView) findViewById (R.id.List1);
final ListView lv2;
lv2 = (ListView) findViewById (R.id.List2);


final DataBase showData = new DataBase(getApplicationContext());
showData.open();

Cursor NameList = showData.GetAllNames();
startManagingCursor(NameList);

// Create an ArrayAdapter, that will actually make the Strings above
// appear in the ListView
int i = NameList.getCount();
String[] FinalString = new String[i];
int j = 0;
while (NameList.moveToNext()) {

FinalString[j] = NameList.getString(0);
j++;
}
if(j != 0)
{
lv1.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_gallery_item, FinalString));
}
NameList.close();
showData.close();

lv1.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
String selectedName = ((TextView) view).getText().toString();
Context ctx= parent.getContext();
final DataBase showData = new DataBase(getApplicationContext());
showData.open();
final String[] columns = new String[] { showData.KEY_ROWID, showData.KEY_NAME, showData.KEY_BILL, showData.KEY_TIP};
final int[] to = new int[] { R.id.ID_list, R.id.Name_list, R.id.Bill_list, R.id.Tip_list};

Cursor NewEntry = showData.GetRowByName(selectedName);
startManagingCursor(NewEntry);

lv2.setAdapter(new SimpleCursorAdapter(ctx, R.layout.listlayout, NewEntry, columns, to));

showData.close();
NewEntry.close();

// Back Button Functionality
Button backButton = (Button) findViewById(R.id.Back);
backButton.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
Intent myIntent = new Intent(v.getContext(), Tipscreen.class);
startActivityForResult(myIntent, 0);
}
}
);
}

}

这是我的 XML 文件

liSTLayout.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="wrap_content" >
<TextView
android:id="@+id/ID_list"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="10px" />
<TextView
android:id="@+id/Name_list"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="10px" />
<TextView
android:id="@+id/Bill_list"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="10px" />
<TextView
android:id="@+id/Tip_list"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="10px"/> </LinearLayout>

--databaseinfoscreen.xml--

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<LinearLayout
android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_weight="1">
<ListView android:text="List" android:id="@+id/List1" android:layout_width="wrap_content" android:textSize="18px" android:layout_height="fill_parent">
</ListView>
</LinearLayout>
<LinearLayout
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_weight="1">
<ListView android:text="List" android:id="@+id/List2" android:layout_width="wrap_content" android:textSize="18px" android:layout_height="fill_parent">
</ListView>
</LinearLayout>
<RelativeLayout
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_weight="1">
<Button android:text="@string/back" android:layout_alignParentBottom="true" android:id="@+id/Back" android:layout_width="wrap_content" android:textSize="18px" android:layout_height="40px"></Button>
</RelativeLayout>
</LinearLayout>

希望这足以结束,如果需要更多信息,请告诉我。我在光标中获取了我需要的所有信息,只是没有显示。我愿意接受其他方法来做到这一点。但是,我无法使这个特定的类扩展 ListActivity,因为它需要扩展 Activity。

同样值得注意。我已经能够使用以下代码行显示该 ListView 。不幸的是,这仅显示一列,而不是我想要的所有列。

lv2.setAdapter(new ArrayAdapter<String>(ctx, android.R.layout.simple_gallery_item, FinalString));

其中 FinalString 只是数据库中被操作为数组的完整数据列。

感谢您的帮助。

最佳答案

既然没有人回复,我想我应该自己回答这个问题。

以下是步骤,我已将其用于不同的项目,因此我将进行总结。如果有人需要的话我可以讲得更详细。

XML:

<ListView android:text="List" android:id="@+id/android:list" android:layout_width="wrap_content" android:scrollbars="horizontal" android:textSize="18px" android:layout_height="fill_parent" android:minHeight="120px">
</ListView>

第 1 步:创建游标并使用数据库函数进行填充(未显示)

    String dbCount = showData.getTotalCount();
Cursor GetAllData = showData.GetAllData();
startManagingCursor(GetAllData);

第 2 步:创建一个包含一堆获取值的 ArrayList,并使用光标中的项目填充该列表。

        int i = GetAllData.getCount();

ArrayList<DB_Get_Values> dbList = new ArrayList<DB_Get_Values>();

while (GetAllData.moveToNext()) {
DB_Get_Values w = new DB_Get_Values(GetAllData.getString(0), GetAllData.getString(1), GetAllData.getString(2));
dbList.add( w );
j++;
}

第3步:创建一个适配器类,用于控制 ListView 的显示

          DBAdapter T_Adapter = new DBAdapter( 
this,
dbList );
setListAdapter( T_Adapter );
GetAllData.close();

DB_Get_Values 类:充满 setter/getter

public class DB_Get_Values {

public String P_Key = "";
public String Mac_addr = "";
public String SDK_VRS = "";

public DB_Get_Values( String P_Key, String Mac_addr, String SDK_VRS)
{
this.P_Key = P_Key;
this.Mac_addr = Mac_addr;
this.SDK_VRS = SDK_VRS;
}
public String get_Mac_addr() {
return Mac_addr;
}
public String get_P_Key() {
return P_Key;
}
public String get_SDK_VRS() {
return SDK_VRS;
}
}

类 DBAdapter:获取要放入 ListView 中的值并允许以编程方式控制显示。

class AdapterView extends LinearLayout {        
public AdapterView(Context context,
DB_Get_Values list ) {
super( context );

this.setOrientation(HORIZONTAL);

LinearLayout.LayoutParams PkeyParams =
new LinearLayout.LayoutParams(40, LayoutParams.WRAP_CONTENT);
PkeyParams.setMargins(1, 1, 1, 1);

TextView Pkey = new TextView( context );
Pkey.setText( list.get_P_Key() );
Pkey.setTextSize(14f);
Pkey.setTextColor(Color.WHITE);
addView( Pkey, PkeyParams);

LinearLayout.LayoutParams MacAddrParams =
new LinearLayout.LayoutParams(100, LayoutParams.WRAP_CONTENT);
MacAddrParams.setMargins(1, 1, 1, 1);
TextView MacAddr = new TextView( context );
MacAddr.setText( list.get_Mac_addr() );
MacAddr.setTextSize(14f);
MacAddr.setTextColor(Color.WHITE);
addView( MacAddr, MacAddrParams);

LinearLayout.LayoutParams SDK_VRSParams =
new LinearLayout.LayoutParams(20, LayoutParams.WRAP_CONTENT);
SDK_VRSParams.setMargins(1, 1, 1, 1);
TextView SDK_VRS = new TextView( context );
SDK_VRS.setText( list.get_SDK_VRS() );
SDK_VRS.setTextSize(14f);
SDK_VRS.setTextColor(Color.WHITE);
addView( SDK_VRS, SDK_VRSParams);
}
}
public class DBAdapter extends BaseAdapter {

private Context context;
private List<DB_Get_Values> list;

public DBAdapter(Context context, List<DB_Get_Values> list ) {
this.context = context;
this.list = list;
}

public int getCount() {
return list.size();
}

public Object getItem(int position) {
return list.get(position);
}

public long getItemId(int position) {
return position;
}
}

第五步:现在你已经完成了!更改 AdapterView 类中的参数以修改其外观。希望这对某人有帮助。

关于java - 从光标填充 ListView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5335277/

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