listview行颜色取决于DB的值

时间:2014-09-11 22:42:44

标签: java android sqlite listview colors

好的,我有app存储有关SQLite数据库中项目的数据。 项目按名称列出并显示在主要活动上。每个项目都有一些细节,有关于所有者的详细信息。我想在列表上设置2种颜色的行。当我是所有者(我从DB获得)时为1种颜色,而对于其他情况则为第2种颜色。

public class BHItemsAdapter extends ArrayAdapter<BHItem> {
private Activity context;
private List<BHItem> bhItems;

private MainActivity cbOwn  ;
public BHItemsAdapter(Activity context, List<BHItem> bhItems) {
    super(context, R.layout.bhitems_list_item, bhItems);
    this.context = context;
    this.bhItems = bhItems;
}

static class ViewHolder {
    public TextView tvBHItemDescription;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    ViewHolder viewHolder;
    View rowView = convertView;
    if(rowView == null) {
        LayoutInflater layoutInflater = context.getLayoutInflater();
        rowView = layoutInflater.inflate(R.layout.bhitems_list_item, null, true);
        viewHolder = new ViewHolder();
        viewHolder.tvBHItemDescription = (TextView) rowView.findViewById(R.id.tvBHItemDescription);
        rowView.setTag(viewHolder);
    } else {
        viewHolder = (ViewHolder) rowView.getTag();
    }

    BHItem task = bhItems.get(position);

    /*line 49*/ if (cbOwn.onCheckboxClicked1())
    {
        rowView.setBackgroundColor(0x30ff2020);

    }
    else {
       rowView.setBackgroundColor(0x30aaffff);
    }
    viewHolder.tvBHItemDescription.setText(task.getItem());
    return rowView;
}
}

即使我发送的是真假,我也会获得nullpointerexeption

//this is from main activity
public boolean onCheckboxClicked1() {


        return true;

}
private void fillListViewData() {
    bhDbAdapter = new DbAdapter(getApplicationContext());
    bhDbAdapter.open();
    getUncompletedTasks();
    getCompletedTasks();
    bhItemsAdapter = new BHItemsAdapter(this, bhItemList);


    lvTodos.setAdapter(bhItemsAdapter);

}
private void initUiElements() {
    etItem = (EditText) findViewById(R.id.etItem);
    etDescription = (EditText) findViewById(R.id.etDescription);
    etOwner = (EditText) findViewById(R.id.etOwner);
    etBorrower = (EditText) findViewById(R.id.etBorrower);
    tvItem = (TextView) findViewById(R.id.tvItem);
    tvDescription = (TextView) findViewById(R.id.tvDescription);
    tvOwner = (TextView) findViewById(R.id.tvOwner);
    tvBorrower = (TextView) findViewById(R.id.tvBorrower);
    tvCategory = (TextView) findViewById(R.id.tvCategory);
    tvReturndate = (TextView) findViewById(R.id.tvReturndate);
    lvTodos = (ListView) findViewById(R.id.lvTodos);
    lvArchive = (ListView) findViewById(R.id.lvArchive);
    llItemAdder = (LinearLayout) findViewById(R.id.llItemAdder);
    llIAButtons = (LinearLayout) findViewById(R.id.llIAButtons);
    llIAEditButtons = (LinearLayout) findViewById(R.id.llIAEditButtons);
    llControlButtons = (LinearLayout) findViewById(R.id.llControlButtons);
    llNewTaskButtons = (LinearLayout) findViewById(R.id.llNewTaskButtons);
    llItemDetails = (LinearLayout) findViewById(R.id.llItemDetails);
    dpReturndate = (DatePicker) findViewById(R.id.dpReturndate);
    ivEditImage = (ImageView) findViewById(R.id.ivEditImage);
    ivDetailImage = (ImageView) findViewById(R.id.ivDetailImage);
    cbReturned = (CheckBox) findViewById(R.id.cbReturned);
    spCategory = (Spinner) findViewById(R.id.spCategory);
    cbOwn = (CheckBox) findViewById(R.id.cbOwn);}
    // this is how i get my value (owner or not)

logcat的

09-11 18:30:15.201    5825-5825/szub.borrowinghelper D/AndroidRuntime﹕ Shutting down VM
09-11 18:30:15.201    5825-5825/szub.borrowinghelper W/dalvikvm﹕ threadid=1: thread exiting with uncaught exception (group=0xb1a99ba8)
09-11 18:30:15.211    5825-5825/szub.borrowinghelper E/AndroidRuntime﹕ FATAL EXCEPTION: main
Process: szub.borrowinghelper, PID: 5825
java.lang.NullPointerException
        at soulflier.borrowinghelper.BHItemsAdapter.getView(BHItemsAdapter.java:49)
        at android.widget.AbsListView.obtainView(AbsListView.java:2263)
        at android.widget.ListView.measureHeightOfChildren(ListView.java:1263)
        at android.widget.ListView.onMeasure(ListView.java:1175)
        at android.view.View.measure(View.java:16497)
        at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5125)
        at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1404)
        at android.widget.LinearLayout.measureVertical(LinearLayout.java:695)
        at android.widget.LinearLayout.onMeasure(LinearLayout.java:588)
        at android.view.View.measure(View.java:16497)
        at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5125)
        at android.widget.FrameLayout.onMeasure(FrameLayout.java:310)
        at android.view.View.measure(View.java:16497)
        at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5125)
        at com.android.internal.widget.ActionBarOverlayLayout.onMeasure(ActionBarOverlayLayout.java:327)
        at android.view.View.measure(View.java:16497)
        at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5125)
        at android.widget.FrameLayout.onMeasure(FrameLayout.java:310)
        at com.android.internal.policy.impl.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2291)
        at android.view.View.measure(View.java:16497)
        at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:1916)
        at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1113)
        at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1295)
        at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1000)
        at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:5670)
        at android.view.Choreographer$CallbackRecord.run(Choreographer.java:761)
        at android.view.Choreographer.doCallbacks(Choreographer.java:574)
        at android.view.Choreographer.doFrame(Choreographer.java:544)
        at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:747)
        at android.os.Handler.handleCallback(Handler.java:733)
        at android.os.Handler.dispatchMessage(Handler.java:95)
        at android.os.Looper.loop(Looper.java:136)
        at android.app.ActivityThread.main(ActivityThread.java:5017)
        at java.lang.reflect.Method.invokeNative(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:515)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
        at dalvik.system.NativeStart.main(Native Method)

我不知道如何将值发送到该适配器。 我是编程的新手 thx任何帮助

0 个答案:

没有答案