2011-08-27 84 views
0

我是新来的android,我想要添加主题按钮只显示一次,而不是每个项目。我怎样才能做到这一点使用SimpleCursorAdapter在LinearLayouts中使用ListView而不是全屏

问候 Waneya伊克巴尔I want the add subject button to be displayed only once and not on each item

的代码如下(见showSubjectOnList()方法):

公共类PopulatingSubject扩展ListActivity {

公共静态字符串subjectName; 私人SoftCopyDatabase主题;

private static int[] subTO = { R.id.subject }; 
private static String[] subFROM = { SUBJECT }; 


@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    subjects = new SoftCopyDatabase(this); 

} 

@Override 
public void onStart() { 
    super.onStart(); 

    try { 

     showSubjectsOnList(); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
} 
public void onStop() { 
    super.onStop(); 
    if (subjects.getReadableDatabase().isOpen()) { 
     subjects.close(); 
    } 
} 

public void onDestroy(){ 
    super.onDestroy(); 
    if (subjects.getReadableDatabase().isOpen()) { 
     subjects.close(); 
    } 
} 

private void showSubjectsOnList() { 

    String sql = "SELECT " + _ID + "," + SUBJECT + " FROM " + TABLE_NAME 
      + " GROUP BY " + SUBJECT + ";"; 
    Cursor cursor = subjects.getReadableDatabase().rawQuery(sql, null); 
    SimpleCursorAdapter adapter = new SimpleCursorAdapter(this, 
      R.layout.item_subject, cursor, subFROM, subTO); 
    setListAdapter(adapter); 
    startManagingCursor(cursor); 

} 
@Override 
protected void onListItemClick(ListView listView, View view, int position, 
     long id) { 
    super.onListItemClick(listView, view, position, id); 
    subjectName=getSubjectName(Long.toString(id)); 
    startActivity(new Intent(this, PopulatingLectures.class)); 
} 



private String getSubjectName(String ID) { 

    Cursor cursor = subjects.getReadableDatabase().query(TABLE_NAME, 
      new String[] { SUBJECT }, "_ID=?", new String[] { ID }, null, 
      null, null); 
    cursor.moveToFirst(); 
    int subjectIndex = cursor.getColumnIndex(SUBJECT); 
    String subjectName = cursor.getString(subjectIndex); 
    cursor.close(); 
    return subjectName; 
} 

}

布局如下:

布局的图片:

enter image description here

+0

你可以举一个你想要完成的布局的例子吗? – hooked82

+0

其实我想实现的是在listActivity中添加一个按钮,但不在列表中。如果我在扩展ListActivity的Activity中添加一个按钮,则该按钮将显示在List的每个项目中,因为SimpleCursorAdapter正在使用XML的ID填充列表。 –

+0

什么是问题? –

回答

0

您必须自己在代码或XML中建立布局(建议使用XML)。 然后在该布局中创建一个ListView。您可以创建按钮并将其添加到相同的布局。由于您正在创建布局,因此您可以以任何适合您需要的方式来定位ListView和Button。

然后创建一个对ListView的引用,以便您可以为其设置适配器。

例子:

布局XML文件名为 “my_layout.xml”:

<LinearLayout 
    android:orientation="vertical" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent"> 

    <Button 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="Sign In" /> 

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

</LinearLayout> 

然后在代码:

public class MyActivity { 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.my_layout); 
     ListView listView = (ListView) findViewById(R.id.my_listview); 
     listView.setAdapter(/*Put your adapter reference here*/); 
     listView.setOnItemClickListener(new OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
      // Handle list selections here 
     } 
    }); 
    } 
} 

显然没有数据,但你可以这样做,但设置你的适配器在上面指出的地方。

+0

@COdeAttack 我试图做到这一点,并在my_laout.xml中创建了一个id为listViewLinearLayout的布局。 我然后在简单的游标适配器使用该ID(listViewLinearLayout)如下 SimpleCursorAdapter适配器=新SimpleCursorAdapter(此,R.id.listViewLinearLayout,光标,subFROM,subTO); 但是应用程序崩溃,只是因为SimpleCursorAdapter需要R.layout.my_layout而不是my_layout中的linearLayout的id。 我也尝试使用listView的id(ID是listView1),但这也没有奏效。 –

+0

好的,你已经去了,这很好。如果您可以在上面的问题中粘贴一些相关的代码/ xml,那么这将帮助我们找到问题或提出建议。 – C0deAttack

+0

如何在此张贴图片? :s –