我似乎無法在互聯網上找到任何解決此問題的方法。基本上我正在開發一個應用程式,該應用程式可讓用戶創建鍛煉并查看它們,但我正在努力處理視圖部分。
我的資料庫全部使用用戶輸入設定,使用欄位鍛煉、組和代表,用戶創建鍛煉并將用于構建它的表的內容復制到一個新的表中,并清除該表以接受新的輸入。
我想使用表名創建一個回收器視圖,將選定的專案名稱傳遞給下一個片段,并使用用戶選擇來確定下一個回收器視圖中將顯示哪些資料。
這可能嗎,如果可以,請告訴我如何做,我應該在幾天內準備好這個應用程式以進行分配
任何幫助將不勝感激,謝謝 - 伊恩
uj5u.com熱心網友回復:
這可能嗎,如果可以,請告訴我如何。
有可能的。
這是一個演示如何作業的演示。
首先是擴展 SQLiteOPenHelper 的類,如通常使用的那樣,即本例中的DatabaseHelper:-
class DatabaseHelper extends SQLiteOpenHelper {
public static final String DATABASE_NAME = "thedatabase.db";
public static final int DATABASE_VERSION = 1;
private SQLiteDatabase db;
private DatabaseHelper(Context context) {
super(context,DATABASE_NAME,null,DATABASE_VERSION);
db = this.getWritableDatabase();
}
private static volatile DatabaseHelper instance = null;
public static DatabaseHelper getInstance(Context context) {
if (instance == null) {
instance = new DatabaseHelper(context);
}
return instance;
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL(MyTable.CREATE_SQL);
}
@Override
public void onUpgrade(SQLiteDatabase db, int old_version, int new_version) {
}
public long insertMyTableRow(Long id, String item_name) {
ContentValues cv = new ContentValues();
cv.put(MyTable.COL_ITEM_NAME,item_name);
if (id != null && id == 0) {
cv.put(MyTable.COl_ID,id);
}
return db.insertWithOnConflict(MyTable.TABLE_NAME,null,cv,SQLiteDatabase.CONFLICT_IGNORE);
}
@SuppressLint("Range")
public MyTable[] getAllMyTableRowAsArrayOfMyTable() {
MyTable[] rv = new MyTable[0];
Cursor csr = db.query(MyTable.TABLE_NAME,null,null,null,null,null,null);
if (csr.getCount() > 0) {
rv = new MyTable[csr.getCount()];
}
int idx = 0;
while (csr.moveToNext()) {
rv[idx ] = new MyTable(
csr.getLong(csr.getColumnIndex(MyTable.COl_ID)),
csr.getString(csr.getColumnIndex(MyTable.COL_ITEM_NAME)
)
);
}
return rv;
}
@SuppressLint("Range")
public MyTable getAMyTableById(long id) {
MyTable rv = new MyTable(-1,"NOT FOUND");
Cursor csr = db.query(MyTable.TABLE_NAME,null,MyTable.COl_ID "=?",new String[]{String.valueOf(id)},null,null,null);
if (csr.moveToFirst()) {
rv = new MyTable(csr.getLong(csr.getColumnIndex(MyTable.COl_ID)),csr.getString(csr.getColumnIndex(MyTable.COL_ITEM_NAME)));
}
return rv;
}
}
class MyTable {
public static final String TABLE_NAME = (MyTable.class.getSimpleName()).toLowerCase();
public static final String COl_ID = TABLE_NAME BaseColumns._ID;
public static final String COL_ITEM_NAME = TABLE_NAME "_item_name";
// and so on
public static final String CREATE_SQL = "CREATE TABLE IF NOT EXISTS " TABLE_NAME
"("
COl_ID " INTEGER PRIMARY KEY"
"," COL_ITEM_NAME " TEXT UNIQUE "
// and so on
")";
long id;
String itemName;
MyTable(long id, String item_name) {
this.id = id;
this.itemName = item_name;
}
}
將被稱為MainActivity2的活動通過 Intent Extra 傳遞一個被點擊專案的唯一識別符號:-
public class MainActivity2 extends AppCompatActivity {
public static final String INTENT_EXTRA_MYTABLE_ID = "ie_mytable_id";
DatabaseHelper dbHelper;
TextView itemName;
Button done;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main2);
itemName = this.findViewById(R.id.item_name);
done = this.findViewById(R.id.done);
dbHelper = DatabaseHelper.getInstance(this);
itemName.setText((dbHelper.getAMyTableById(this.getIntent().getLongExtra(INTENT_EXTRA_MYTABLE_ID,-99))).itemName);
done.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
finish();
}
});
}
}
RecyclerView的配接器TheAdapter等,包括 Item Click 和 Item Long Click 偵聽器。單擊一個專案 Toasts 詳細資訊。長按啟動顯示被點擊專案的第二個活動:-
public class TheAdapter extends RecyclerView.Adapter<TheAdapter.ViewHolder> {
private MyTable[] localData;
public static class ViewHolder extends RecyclerView.ViewHolder {
private final TextView textView1;
private final TextView textView2;
public ViewHolder(View view) {
super(view);
textView1 = (TextView) view.findViewById(android.R.id.text1);
textView2 = (TextView) view.findViewById(android.R.id.text2);
}
public TextView getTextView1() {
return textView1;
}
public TextView getTextView2() {
return textView2;
}
}
public TheAdapter(MyTable[] thedata) {
localData = thedata;
}
@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(android.R.layout.simple_list_item_2,parent,false);
return new ViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
holder.getTextView1().setText(String.valueOf(localData[position].id));
holder.getTextView2().setText(localData[position].itemName);
holder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Toast.makeText(
view.getContext(),
"You clicked the Item named "
localData[holder.getAdapterPosition()].itemName
" the ID is " String.valueOf(localData[holder.getAdapterPosition()].id),
Toast.LENGTH_SHORT
).show();
}
});
holder.itemView.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View view) {
Intent intent = new Intent(view.getContext(),MainActivity2.class);
intent.putExtra(MainActivity2.INTENT_EXTRA_MYTABLE_ID,localData[holder.getAdapterPosition()].id);
view.getContext().startActivity(intent);
return true;
}
});
}
@Override
public int getItemCount() {
return localData.length;
}
}
最后是第一個/初始活動MainActivity :-
public class MainActivity extends AppCompatActivity {
DatabaseHelper dbHelper;
RecyclerView myTableList;
TheAdapter adapter;
MyTable[] theDataToBeDisplayed;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
myTableList = this.findViewById(R.id.mytable_list);
dbHelper = DatabaseHelper.getInstance(this);
addSomeTestingData();
setupOrRefreshMyTableList();
}
private void setupOrRefreshMyTableList() {
theDataToBeDisplayed = dbHelper.getAllMyTableRowAsArrayOfMyTable();
if (adapter == null) {
adapter = new TheAdapter(theDataToBeDisplayed);
myTableList.setAdapter(adapter);
myTableList.setLayoutManager(
new LinearLayoutManager(this)
);
} else {
/* handle changed data here */
}
}
private void addSomeTestingData() {
for (int i=0; i < 100; i ) {
dbHelper.insertMyTableRow(null, "A" String.valueOf(i));
}
}
}
運行時:-

當一個專案(例如 A10(誰的 id 是 11))被長按時:-

單擊 DONE 回傳到第一個活動。
uj5u.com熱心網友回復:
為了澄清,您想制作清單嗎?使用一對多關系或使用房間映射。幾天前我已經完成了這樣的實施,請隨時詢問。
https://developer.android.com/training/data-storage/room/relationships?fbclid=IwAR3P_rK8OeOpBpP9jgbL8FqxEKPXPvOaFwFiCMy4pIpblg_aF_9QloavHpM
https://developer.android.com/training/data-storage/room/relationships?fbclid=IwAR22XINRNxTs3b_KOleeYwjGuIwjUA90S3tvpMWkf1dKYjvDDo5qWAbLfoE
要獲取以前的 ID 或名稱,只需使用來自第一個 recyclerview 的特定元素的位置(或 ID)的簡單捆綁,并在第二個中使用它來顯示正確的資料。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/377834.html
