Передача элемента списка методу в sqlite android
Цитата:Когда я ввожу имя сотрудника в поле поиска и нажимаю на кнопку "Поиск", соответствующие результаты отображаются в listview //My code does that part. И когда я нажимаю на одно из приведенных имен сотрудников из списка, оно должно переместить меня в новое действие, где отображаются имя, должность, телефон, электронная почта и отдел этого сотрудника.
Я застрял на получении идентификатора щелкнутого элемента части списка.
Это то, что я сделал до сих пор.
public class MainActivity extends Activity { EditText name; //Textbox to input name ArrayAdapter<String> nameAdapter; DeptDPHelper Emp; //Database object @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); final Button Search = (Button)findViewById(R.id.Search); name = (EditText)findViewById(R.id.name); final ListView namelist = (ListView)findViewById(R.id.LV); nameAdapter = new ArrayAdapter<>(getApplicationContext() , android.R.layout.simple_list_item_1); namelist.setAdapter(nameAdapter); Emp = new DeptDPHelper(getApplicationContext()); //Filling tables Emp.InsertEmp("AhmedMhmmd" , "010224455" , "gg@jj.com" , "xx"); Emp.InsertEmp("MhmmdMhmoud" , "010224455" , "gg@jj.com" , "xx"); Emp.InsertEmp("Ahmedxxx" , "010224455" , "gg@jj.com" , "xx"); Emp.InsertDept("Finance"); Emp.InsertDept("Sales"); //When clicking on the search button Search.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Cursor cur = Emp.GetEmpname(name.getText().toString()); nameAdapter.clear(); if(cur != null) { while(!cur.isAfterLast()) { //Toast.makeText(getApplicationContext() , "Error" , Toast.LENGTH_LONG).show(); nameAdapter.add(cur.getString(0)); cur.moveToNext(); //nameAdapter.add("gg"); } } else { Toast.makeText(getApplicationContext() , "ErrOooor" , Toast.LENGTH_LONG).show(); } } });
Цитата://Проблема отсюда, я хочу, когда я нажимаю на один из результатов поиска, чтобы перейти в новое действие с помощью намерения, где имя, название телефона, адрес электронной почты и отдел этого щелкнутого сотрудника отображаются там. Как я могу получить идентификатор щелкнутого имени и передать его методам getEmpData и getDeptName, чтобы я мог передать их значения новому действию?
Что я уже пробовал:
namelist.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { //This is where i'm stuck in //int x = Integer.parseInt(namelist.getItemAtPosition(position).toString()); Intent i = new Intent(MainActivity.this, empDetails.class); i.putExtra("empName", Emp.getEmpData(x)); i.putExtra("empTitle",Emp.getEmpData()); i.putExtra("empPhone",Emp.getEmpData()); i.putExtra("empEmail",Emp.getEmpData()); i.putExtra("empDept",Emp.getDeptName()); startActivity(i); } }); }
//SQLITE
public static class DeptDPHelper extends SQLiteOpenHelper { SQLiteDatabase EmpDept; public DeptDPHelper(Context context) { super(context, "EmpDept", null, 2); } @Override public void onCreate(SQLiteDatabase db) { db.execSQL("create table department(DeptID integer primary key autoincrement , name text);"); db.execSQL("create table Employee (EmpID integer primary key autoincrement , name text not null," + "Title text not null , phone text not null , email text not null ," + "DeptID integer, foreign key(DeptID) references department (DeptID))"); //ContentValues row = new ContentValues(); //db.execSQL("insert into Employee (EmpID , name , Title , phone , email ) values ('Ahmemhmmd' , '010224455' , 'gg@jj.com' , 'xx')"); } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { db.execSQL("drop table if exists department "); db.execSQL("drop table if exists Employee "); onCreate(db); } //Inserting data in employee table public void InsertEmp (String Empname, String phone, String Email, String title) { ContentValues roww = new ContentValues(); //roww.put("Id",empID ); roww.put("name", Empname); roww.put("Title", title); roww.put("phone", phone); roww.put("Email", Email); EmpDept = getWritableDatabase(); EmpDept.insert("Employee ", null, roww); EmpDept.close(); } //Inserting data in department table public void InsertDept(String Deptname) { ContentValues row = new ContentValues(); //row.put("Id", DeptID); row.put("name", Deptname); EmpDept = getWritableDatabase(); EmpDept.insert("department ", null, row); EmpDept.close(); } public Cursor GetEmpname(String namee) { EmpDept = getReadableDatabase(); String[] arg = {namee}; Cursor cur = EmpDept.rawQuery("select name from employee where name like ?;", new String[]{"%"+namee+"%"}); cur.moveToFirst(); EmpDept.close(); return cur; } public Cursor Fetchallemployee() { EmpDept = getReadableDatabase(); String[] rowdetails = {"name"}; Cursor cursor = EmpDept.query("employee", rowdetails, null , null, null, null, null); if (cursor != null) { cursor.moveToFirst(); } EmpDept.close(); return cursor; }
//Selecting employee name, title, phone, email by inputting employee ID public Cursor getEmpData(Integer employeeID) { EmpDept = getReadableDatabase(); // String[] empRow = {"name", "title", "phone", "Email"}; //String[] arg = {name, title, phone, email}; Integer[] empRow = {employeeID}; //Cursor c = EmpDept.query("Employee", empRow, null, null, null, null, null); Cursor c = EmpDept.rawQuery("Select name, Title, phone, email from Employee where EmpID like ?", new String[]{employeeID.toString()}); if (c != null) { c.moveToFirst(); } EmpDept.close(); return c; }
//Selecting department name by inputting department ID public Cursor getDeptName(Integer departmentID) { EmpDept = getReadableDatabase(); Integer[] deptRow = {departmentID}; //Cursor cr = EmpDept.rawQuery("Select name from department d inner join Employee e on d.DeptID = e.DeptID where e.name like ?",new String[]{deptartmentID.toString()}); Cursor cr = EmpDept.rawQuery("Select name from department where DeptID like ?",new String[]{departmentID.toString()}); if (cr != null) { cr.moveToFirst(); } EmpDept.close(); return cr; } } }
David Crow
Рассматривали ли вы возможность задать этот (длинный) вопрос на самом форуме Android? Этот раздел "Быстрые ответы" предназначен для гораздо более коротких вопросов и еще более коротких ответов.
Для краткости рассмотрим что-то вроде:
class EmpInfo { String name; String title; String phone; String email; String dept; } ... ArrayAdapter<EmpInfo> nameAdapter = new ArrayAdapter<EmpInfo>(...); ... while (! cur.isAfterLast()) { String name = cur.getString(0); String title = cur.getString(1); String phone = cur.getString(2); String email = cur.getString(3); String dept = cur.getString(4); nameAdapter.add(new EmpInfo(name, title, phone, email, dept)); cur.moveToNext(); } ... Intent i = new Intent(MainActivity.this, empDetails.class); EmpInfo empInfo = nameAdapter.getItem(position); i.putExtra("empName", empInfo.name); i.putExtra("empTitle", empInfo.title); i.putExtra("empPhone", empInfo.phone); i.putExtra("empEmail", empInfo.email); i.putExtra("empDept", empInfo.dept);