ListView布局问题

时间:2011-04-05 18:09:23

标签: android listview android-layout

我正在尝试预览一个运动日志,其中显示了用户在一天内执行的所有运动以及持续时间和燃烧的卡路里,最后将有当天燃烧的总卡路里。
当我第一次尝试这样做时,我构建了一个10行的布局,每行有3个文本视图,代表练习名称,持续时间和燃烧的卡路里。但这是不切实际的,因为用户条目每天都会有所不同。所以我提出了这个解决方案,我不确定这是否可以在android中做到。或者 请看一下,告诉我出了什么问题对不起我的长篇介绍

布局:

<?xml version="1.0" encoding="UTF-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent"
    android:orientation="vertical">
    <TableLayout android:layout_height="wrap_content" 
        android:layout_width="fill_parent"
        android:stretchColumns="0">
        <TableRow android:layout_width="wrap_content"
            android:layout_height="wrap_content">
            <TextView android:text="Activity" 
                android:layout_height="wrap_content" 
                android:layout_width="wrap_content">
            </TextView>
            <TextView android:layout_width="wrap_content" 
                android:text="Duration" 
                android:layout_height="wrap_content">
            </TextView>
            <TextView android:layout_width="wrap_content" 
                android:text="Burned" 
                android:layout_height="wrap_content">
            </TextView>
        </TableRow>
        <TableRow android:layout_height="wrap_content"
            android:layout_width="fill_parent">
        <ListView android:id="@+id/lstAct" 
            android:layout_width="fill_parent" 
            android:layout_height="wrap_content">
        </ListView>
        <ListView android:id="@+id/lstDur" 
            android:layout_width="fill_parent" 
            android:layout_height="wrap_content">
        </ListView>
        <ListView android:id="@+id/lstbrn" 
            android:layout_width="fill_parent" 
            android:layout_height="wrap_content">
        </ListView>         
        </TableRow>
            <TableRow android:layout_width="wrap_content"
            android:layout_height="wrap_content">           
            <TextView android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text=" Total Burned Calories">
        </TextView>
        <TextView android:id="@+id/Totbrn"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content">
        </TextView>
        <TextView android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text=" Kcal">
        </TextView>
    </TableRow> 
        <Button android:id="@+id/addExcBtn" 
         android:layout_width="wrap_content" 
         android:text="Add another exercise" 
         android:layout_height="wrap_content">
        </Button>           
    </TableLayout>
</LinearLayout>

这是课程代码:

public class ExerciseDiary extends Activity implements OnClickListener {
private DataBaseHelper helper;
private ListView l1;
private ListView l2;
private ListView l3;
static String[] activity;
static Integer[] duration;
static Integer[] burned;

@Override
   protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.test);
      helper = new DataBaseHelper(this);      
      l1 = (ListView) findViewById(R.id.lstAct);
      l2 = (ListView) findViewById(R.id.lstDur);
      l3 = (ListView) findViewById(R.id.lstbrn);
      fillArray();
      l1.setAdapter(new ArrayAdapter<String>(this, R.layout.items,activity));
      l2.setAdapter(new ArrayAdapter<Integer>(this, R.layout.items,duration));
      l3.setAdapter(new ArrayAdapter<Integer>(this, R.layout.items,burned));
          View AddButton = findViewById(R.id.addExcBtn);
      AddButton.setOnClickListener(this);                 
   }
public void onClick(View v){
       switch (v.getId()) {     
            case R.id.addExcBtn:
                startActivity(new Intent(this, Exercise.class));
            break;                              
       }
   }
public boolean onKeyDown(int keyCode, KeyEvent event) {
    if (keyCode == KeyEvent.KEYCODE_BACK){
        startActivity(new Intent(this, Activity_DietTracker.class));
        return true;
    }
    return false;
}   
public void fillArray(){
    GregorianCalendar toDay = new GregorianCalendar();
    String today = AllCmnMtd.getDate(toDay);
    activity = new String[100];
    duration = new Integer[100];
    burned = new Integer[100];
    int i = 0;
      helper.openDataBase();          
    SQLiteDatabase db = helper.getReadableDatabase();
    Cursor c = db.rawQuery("Select * from ExerciseLog where EDate = '" + today + "'", null);
    if(c!=null){
        if(c.moveToFirst()){
            do{
                activity[i] = c.getString(c.getColumnIndex("Exercise"));
                duration[i] = c.getInt(c.getColumnIndex("Duration"));
                burned[i] = c.getInt(c.getColumnIndex("Burned"));
                i++;
            }while(c.moveToNext());
        }
    }
    helper.close();
}
}

,这些是错误:

java.lang.NullPointerException
at android.widget.ArrayAdapter.createViewFromResource (ArrayAdapter.java:351)
at android.widget.ArrayAdapter.getView(ArrayAdapter.java:323)
at android.widget.AbsListView.obtainView(AbsListView.java:1251)
at android.widget.ListView.measureHeightOfChildren(ListView.java:1117)
at android.widget.ListView.onMeasure(ListView.java:1030)
at android.view.View.measure(View.java:7115)
at android.widget.TableRow.measureChildBeforeLayout(TableRow.java:221)
at android.widget.LinearLayout.measureHorizontal (LinearLayout.java:619)
at android.widget.TableRow.onMeasure(TableRow.java:112)
at android.view.View.measure(View.java:7115)  

以及其他25人。

如果有人有任何相关信息,或者有其他方法,请告诉我。

谢谢

1 个答案:

答案 0 :(得分:0)

XML只是问题的一部分。在主类中,您必须将视图的实例声明为成员数据: 私有ListView mConversationView;

然后在你的onCreate中你必须初始化指针。  mConversationView =(ListView)findViewById(R.id.in);

如果你不参与后者,你将得到你看到的空指针。