我已經搜索了很長的這個問題的答案,但還沒有找到。 我在做項目與SQLiteDatabase。一切工作正常,除了分配SQLiteOpenHelper到我的CustomAdapter。我在Android工作室和所有這些Java工具大約兩個月,所以我只是在互聯網上搜索幾乎所有東西。這裏是我的項目的片段。如何在自定義適配器中分配SQLiteOpenHelper?
SQLiteOpenHelper:
public class ActivitiesDataBase extends SQLiteOpenHelper {
public static final String DATABASE_NAME = "database.db";
public static final String ACTIVITIES_COLUMN_ID = "id";
public static final String ACTIVITIES_TABLE_NAME = "create_activity";
public static final String ACTIVITIES_COLUMN_NAME = "activity";
public static final String ACTIVITIES_COLUMN_NUMBER = "number";
public static final String ACTIVITIES_COLUMN_DESCRIPTION = "description";
//Created command to create items
public void addactivity(String activity, String description, String number){
SQLiteDatabase db = this.getWritableDatabase();
ContentValues cv =new ContentValues();
cv.put(ACTIVITIES_COLUMN_NAME, activity);
cv.put(ACTIVITIES_COLUMN_NUMBER, number);
cv.put(ACTIVITIES_COLUMN_DESCRIPTION, description);
db.insert(ACTIVITIES_TABLE_NAME, null, cv);
db.close();
}
//Constructor
public ActivitiesDataBase(Context context) {
super(context, DATABASE_NAME, null, 1);
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL("CREATE TABLE create_activity" +
"(id INTEGER PRIMARY KEY, " +
"activity TEXT, " +
"number TEXT, " +
"description TEXT)");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("DROP TABLE IF EXISTS create_activity");
}
}
ActivityMain的小部分:
public class MainActivity extends AppCompatActivity implements DrawerLocker {
//Assigning SQLiteOpenHelper, no errors, result is fine.
final ActivitiesDataBase db = new ActivitiesDataBase(this);
private SQLiteDatabase sql;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//Here I call command addactivity and it works fine, because I
//assigned SQLiteOpenHelper well.
db.addactivity(activitysubject, activitydesc, activitynum);
}
}
這裏是我的自定義適配器:
public class CustomAdapter extends ArrayAdapter {
private List sarasas = new ArrayList();
public CustomAdapter(Context context, int resource) {
super(context, resource);
}
@Override
public void add(Object object) {
super.add(object);
sarasas.add(object);
}
@Override
public int getCount() {
return this.sarasas.size();
}
@Override
public Object getItem(int position) {
return this.sarasas.get(position);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View v = convertView;
final Duomenys pavadinimas;
if (v == null){
LayoutInflater inflater = (LayoutInflater) this.getContext()
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
v = inflater.inflate(R.layout.listview_layout, parent, false);
pavadinimas = new Duomenys();
//I have missed some unnecessary text here, hope it doesn't change
//contex a lot
//So, crap starts here. Don't mind that pavadinimas after dots.
//Basically it's written here similarly to MainActivity, but it
//shows errors because assigning is different :(
// (SQLiteOpenHelper assigning is below)
pavadinimas.plus.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
pavadinimas.db.addactivity(name, description, number);
}
});
v.setTag(pavadinimas);
}else {
pavadinimas = (Duomenys) v.getTag();
}
DataActivity perdavimas = (DataActivity) this.getItem(position);
pavadinimas.txt1.setText(perdavimas.getNamee());
return v;
}
static class Duomenys{
SQLiteDatabase sql;
//Here i don't know how to assign my SQLiteOpenHelper,
// so actually, I NEED HELP HERE
ActivitiesDataBase db;
}
}
所以,我真的想知道,如何分配(如果可能)SQLiteOpenHelper在自定義適配器。任何幫助都是有好處的。
所以,這是我編輯的版本。一切都很好用靜態類Duomenys,但有一些下劃線在該部分:
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View v = convertView;
//Here it underlines mContext and i really don't know from where to get it
final Duomenys pavadinimas = new Duomenys(mContext);
if (v == null){
LayoutInflater inflater = (LayoutInflater) this.getContext()
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
v = inflater.inflate(R.layout.listview_layout, parent, false);
//Then it underlines() after Duomenys
pavadinimas = new Duomenys();
pavadinimas.plus.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
pavadinimas.db.assactivity(name, description, number);
}
});
v.setTag(pavadinimas);
}else {
//And it underlines pavadinimas, saying
//"Cannot assign a value to final variable 'pavadinimas' "
pavadinimas = (Duomenys) v.getTag();
}
我用Java標記換出了問題上的JavaScript標記。他們是兩種截然不同的語言。就這樣你知道:) –
哦,我的上帝!順便說一句,謝謝 –
,你是知道java的人,而不是javaScript,對不對? –