如何从Activity(Intent)启动ListActivity而不使用ListView?

时间:2015-12-01 07:46:07

标签: android listview

我想从普通的Activity启动ListActivity,但ListActivity.xml不包含listview对象,而是有一个tablelayout和一个tablerow。

这是XML:

<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/tLayoutLR"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin">

<TableRow
    android:id="@+id/trRowLR"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    tools:ignore="UselessParent" >

    <TextView
        android:id="@+id/tvTextoLR"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="ID \t Nombre \t\t\t\t\t\tDescripción"
        tools:ignore="HardcodedText" />

</TableRow>

在我的主要活动中,我尝试启动ListActivity,但它失败了。这是代码:

final Button btnListas = (Button) findViewById(R.id.button);
    btnListas.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Intent i = new Intent(ActividadInicial.this, MainActivity.class);
            startActivity(i);
        }
    });

我在这里做的是在TableRows中填充从SQLite数据库中提取的一些信息。我创建了一个类,在这种情况下是歌曲,并且还创建了一个实现数组列表的类,所以我可以轻松地插入,更新,删除等。这是我使用的类:

public class C_Lista extends ArrayList <Song> {

private Context _Contexto;

public C_Lista(Context _Contexto) {
    this._Contexto = _Contexto;
}

// Method that fills
public void LoadSongs()
{
    try{
        this.clear();
        String strNombreBD = "BDMusica";
        BDMusica con = new BDMusica(_Contexto,strNombreBD, null, 1);
        SQLiteDatabase db = con.getWritableDatabase();
        String strSQL = "Select ID_Song, Nombre, Cantante, Year, Album From Songs ";

        Cursor cursor = db.rawQuery(strSQL, null);

        if(cursor.moveToFirst())
        {
            do{
                Song objA = new Song(_Contexto);
                objA.setID(cursor.getInt(0));
                objA.setNombre(cursor.getString(1));
                objA.setCantante(cursor.getString(2));
                objA.setYear(cursor.getInt(3));
                objA.setAlbum(cursor.getString(4));

                this.add(objA);
            }while (cursor.moveToNext());
        }
        cursor.close();
        db.close();

    }
    catch(Exception e)
    {
        Log.e("Archivos Leer: ", "JALQ" + e.getMessage(), e);
    }
}
希望你能帮助我。提前谢谢。

2 个答案:

答案 0 :(得分:1)

ListActivity的文档清楚地说明了:

  

你自己的视图必须包含一个带有id的ListView对象   &#34; @android:ID /列表&#34;

由于您的布局不包含该内容,因此在执行getViewById(android.R.id.ist)

时,活动会崩溃

答案 1 :(得分:0)

我建议你永远不要使用ListActivity。 ListActivity只是在xml中查找@android:id / list,并帮助您直接从Activity获取ListView过程。

相反,使用通常的活动 - 如果你想在其中放入一个列表,只需将其放入xml中,无论如何都要命名,使用Activity.findViewById找到它并直接使用它的程序。

你从中获得了什么?当您为所有屏幕使用相同的活动类型时,您可以使用有用的程序(例如隐藏/显示键盘等)制作父活动,这样您的类结构将看起来像活动 - &gt; MyParentActivity-&GT; MyScreenActivity。