好的,我有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任何帮助