У меня есть эти виды деятельности: CoffeeActivity
и DrinkActivity
Используйте два ArrayAdapter в том же ListView
Это моя основная деятельность, которая имеет ListView
public class CalculationHistoryListActivity extends AppCompatActivity {
Save saveData;
ListView listView;
ArrayList arrayListdrink,arrayListCoffee;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_calculation_history_list);
// Toasts the test ad message on the screen. Remove this after defining your own ad unit ID.
// Toast.makeText(this, TOAST_TEXT, Toast.LENGTH_LONG).show();
//sqlite database
saveData = new Save(CalculationHistoryListActivity.this);
//listview
listView = (ListView) findViewById(R.id.list);
//coffee list
arrayListCoffee = saveData.getAllCoffeeCalculation();
ArrayAdapter coffeeArrayAdapter = new ArrayAdapter(CalculationHistoryListActivity.this,
R.layout.list_view_item_coffee, R.id.total_money_coffee, arrayListCoffee);
listView.setAdapter(coffeeArrayAdapter);
//drink list
arrayListdrink = saveData.getAllDrinkCalculation();
ArrayAdapter drinkArrayAdapter = new ArrayAdapter(CalculationHistoryListActivity.this,
R.layout.list_view_item_coffee, R.id.total_money_drink,arrayList);
listView.setAdapter(drinkArrayAdapter);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_calculation_history_list, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
}
Это моя база данных Helper
public class Save extends SQLiteOpenHelper {
private static final String DATABASE_NAME = "my.db";
private static final String TABLE = "mytable";
private static final String COFFEE = "coffee";
private static final String DRINK = "drink";
public Save(Context context) {
super(context, DATABASE_NAME, null, 1);
}
@Override
public void onCreate(SQLiteDatabase sqLiteDatabase) {
String query ;
query = "CREATE TABLE " +TABLE+ "(" +COFFEE+ " TEXT, " +DRINK+ " TEXT " + ")";
sqLiteDatabase.execSQL(query);
}
@Override
public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) {
sqLiteDatabase.execSQL(" DROP FILE IF EXISTS " + TABLE);
onCreate(sqLiteDatabase);
}
//this is coffee section
public boolean addDatabaseToCoffee(int i){
SQLiteDatabase sqLiteDatabase = getWritableDatabase();
ContentValues contentValues = new ContentValues();
contentValues.put(COFFEE,i);
long chaker = sqLiteDatabase.insert(TABLE,null,contentValues);
if (chaker == -1){
return false;
}else {
return true;
}
}
//this is drink section
public boolean addDatabaseToDrink(int i){
SQLiteDatabase sqLiteDatabase = getWritableDatabase();
ContentValues contentValues = new ContentValues();
contentValues.put(DRINK,i);
long chaker = sqLiteDatabase.insert(TABLE,null,contentValues);
if (chaker == -1){
return false;
}else {
return true;
}
}
//coffee
public ArrayList<String> getAllCoffeeCalculation() {
ArrayList<String> array_list = new ArrayList<String>();
//hp = new HashMap();
SQLiteDatabase db = this.getReadableDatabase();
Cursor res = db.rawQuery("SELECT * FROM " + TABLE,null);
res.moveToFirst();
while(res.isAfterLast() == false){
array_list.add(res.getString(res.getColumnIndex(COFFEE)));
res.moveToNext();
}
return array_list;
}
//drink
public ArrayList<String> getAllDrinkCalculation() {
ArrayList<String> array_list = new ArrayList<String>();
//hp = new HashMap();
SQLiteDatabase db = this.getReadableDatabase();
Cursor res = db.rawQuery("SELECT * FROM " + TABLE,null);
res.moveToFirst();
while(res.isAfterLast() == false){
//array_list.add(res.getString(res.getColumnIndex(DRINK)));
res.moveToNext();
}
return array_list;
}
}
Моя проблема заключается в том, что у меня есть две операции, и когда я использую действие «Кофе» или «Пить» в течение одного раза, все в порядке, но если я хочу использовать две операции как в один раз, мое приложение падает
Мой LogCat
java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String java.lang.Object.toString()' on a null object reference
at android.widget.ArrayAdapter.createViewFromResource(ArrayAdapter.java:401)
at android.widget.ArrayAdapter.getView(ArrayAdapter.java:369)
at android.widget.AbsListView.obtainView(AbsListView.java:3065)
at android.widget.ListView.makeAndAddView(ListView.java:1945)
at android.widget.ListView.fillDown(ListView.java:719)
at android.widget.ListView.fillFromTop(ListView.java:785)
at android.widget.ListView.layoutChildren(ListView.java:1735)
at android.widget.AbsListView.onLayout(AbsListView.java:2852)
at android.view.View.layout(View.java:17995)
at android.view.ViewGroup.layout(ViewGroup.java:5817)
at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1742)
at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1585)
at android.widget.LinearLayout.onLayout(LinearLayout.java:1494)
at android.view.View.layout(View.java:17995)
at android.view.ViewGroup.layout(ViewGroup.java:5817)
at android.widget.FrameLayout.layoutChildren(FrameLayout.java:344)
at android.widget.FrameLayout.onLayout(FrameLayout.java:281)
at android.widget.ScrollView.onLayout(ScrollView.java:2537)
at android.view.View.layout(View.java:17995)
at android.view.ViewGroup.layout(ViewGroup.java:5817)
at android.widget.RelativeLayout.onLayout(RelativeLayout.java:1080)
at android.view.View.layout(View.java:17995)
at android.view.ViewGroup.layout(ViewGroup.java:5817)
at android.widget.FrameLayout.layoutChildren(FrameLayout.java:344)
at android.widget.FrameLayout.onLayout(FrameLayout.java:281)
at android.view.View.layout(View.java:17995)
at android.view.ViewGroup.layout(ViewGroup.java:5817)
at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1742)
at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1585)
at android.widget.LinearLayout.onLayout(LinearLayout.java:1494)
at android.view.View.layout(View.java:17995)
at android.view.ViewGroup.layout(ViewGroup.java:5817)
at android.widget.FrameLayout.layoutChildren(FrameLayout.java:344)
at android.widget.FrameLayout.onLayout(FrameLayout.java:281)
at android.view.View.layout(View.java:17995)
at android.view.ViewGroup.layout(ViewGroup.java:5817)
Вы не можете использовать два адаптера в одном ListView, но это не имеет никакого отношения к вашей ошибке –
у вас есть один ListView и попытаться установить его на два arrayAdapter ... listView.setAdapter (coffeeArrayAdapter); & listView.setAdapter (drinkArrayAdapter); Зачем? – shanyour
@shanyour, потому что у меня есть два вида активности: CoffeeActivity And Secand - это пьяная деятельность в работе с кофе или напитками. Пользователь может рассчитать цену или т. Д. Ok, я объясню больше, когда пользователь нажимает номер 1. Активность в кофе, тогда они рассчитали цену и идут дальше. 2 активность до предварительного просмотра цен и прежде, чем сохранить пользователю, какие данные он хочет сохранить. а затем 3-го действия сохраняют данные в базе данных и отображаются в виде списка. и это 3-я деятельность - это все расчеты, показывающие, что если пользователь сохранит цену на кофе, то это шоу активности или цена на потребительские напитки, а затем послушайте, вот почему мне нужно сэкономить до стоимости –