gpt4 book ai didi

Android SQLite 将 gridview 中选择的 Item 传递给另一个 Activity 进行编辑

转载 作者:行者123 更新时间:2023-11-29 20:52:21 25 4
gpt4 key购买 nike

基本上我有一个包含帐户的数据库。我使用 GridView 查看它们,您可以从那里选择一个 Account,它会将您定向到我的 Activity AccountManagement,您可以在其中进行修改,从 GridView 中删除或仅查看所选 Account 的所有详细信息。

我的问题是将数据从 GridView 中的选择传递到 AccountManagement。我不完全确定如何正确地使用 Intents。到目前为止,下面的代码不起作用,因为我不知道如何将数据传递到我的 AccountManagement 并从那里正确引用它。

代码在这里,任何带有 Acc 的东西都是有问题的,因为 Acc 是我应该从 GridView 中放置数据的地方。我用很长的 ------ 标记了所有这些行,以便更容易识别。随时询问任何缺少的代码。

在下面编辑最终代码以供引用。

AccountManagement fragment :

public class AccountDetails extends Activity {

DatabaseHelper dbHelper;
static public LinearLayout Linlay;
EditText txtName;
EditText txtAmt;
EditText txtPurpose;
TextView txtDate;
TextView txtEditDate;
Spinner spinStat;
Spinner spinTerm;

@Override
public void onCreate(Bundle savedInstanceState) {

Intent intent = getIntent();
Bundle bundle = intent.getExtras();

super.onCreate(savedInstanceState);
setContentView(R.layout.accdetails);

Linlay = (LinearLayout) findViewById(R.id.Linlay);
spinStat = (Spinner) findViewById(R.id.spinStat);
spinTerm = (Spinner) findViewById(R.id.spinTerm);
txtName = (EditText) findViewById(R.id.txtDelName);
txtAmt = (EditText) findViewById(R.id.txtDelAmt);
txtPurpose = (EditText) findViewById(R.id.txtDelPurpose);
spinTerm = (Spinner) findViewById(R.id.spinTerm);
txtDate = (TextView) findViewById(R.id.colDate);
txtEditDate = (TextView) findViewById(R.id.colEditDate);
spinStat = (Spinner) findViewById(R.id.spinStat);


Utilities.ManageTermSpinner(AccountDetails.this, spinTerm);
for(int i=0;i<spinTerm.getCount();i++)
{
long id=spinTerm.getItemIdAtPosition(i);
if(id==Acc.getTerms())--------------------------------------------
{
spinTerm.setSelection(i, true);
break;
}
}

Utilities.ManageStatSpinner(AccountDetails.this, spinStat);
for(int j=0;j<spinStat.getCount();j++)
{
long id=spinStat.getItemIdAtPosition(j);
if(id==Acc.getStatus())--------------------------------------------
{
spinStat.setSelection(j, true);
break;
}
}


txtName.setText(Acc.getName());---------------------------------------
txtAmt.setText(String.valueOf(Acc.getAmt()));-------------------------
txtPurpose.setText(Acc.getPurpose());---------------------------------



Button delete = (Button) findViewById(R.id.delete);
delete.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
AlertDialog diag = Alerts.DeleteConfirm(AccountDetails.this, Acc );--------------------------------
diag.show();
}
});
}

GridView fragment :

这是我应该将数据放入 Acc 的地方,但我不确定如何,所以这里的所有内容都可以更改,因为我不确定这是否是理想的方式做吧。

        try {
grid.setOnItemClickListener(new OnItemClickListener() {

@Override
public void onItemClick(AdapterView<?> parent, View v, int position,
long id) {
try {



SQLiteCursor cr = (SQLiteCursor) parent.getItemAtPosition(position);
String name = cr.getString(cr.getColumnIndex(DatabaseHelper.colName));
int amount = cr.getInt(cr.getColumnIndex(DatabaseHelper.colAmount));
String purpose = cr.getString(cr.getColumnIndex(DatabaseHelper.colPurpose));
String Terms = cr.getString(cr.getColumnIndex(DatabaseHelper.colTermsClass));
String Status = cr.getString(cr.getColumnIndex(DatabaseHelper.colStatClass));
String date = cr.getString(cr.getColumnIndex(DatabaseHelper.colDate));
String editdate = cr.getString(cr.getColumnIndex(DatabaseHelper.colEditDate));
Account acc = new Account(name, amount, purpose, db.GetTermsID(Terms),date,editdate,db.GetStatID(Status));
acc.SetID((int) id);

Intent myIntent = new Intent(AccountManager.this, AccountDetails.class);
Bundle extras = new Bundle();
myIntent.putExtras(extras);
startActivityForResult(myIntent, 0);


} catch (Exception ex) {
Alerts.CatchError(AccountManager.this, ex.toString());
}
}


});
} catch (Exception ex) {

}

编辑:

GridView 最终 fragment :

        try {
grid.setOnItemClickListener(new OnItemClickListener() {

@Override
public void onItemClick(AdapterView<?> parent, View v, int position,
long id) {
try {



SQLiteCursor cr = (SQLiteCursor) parent.getItemAtPosition(position);
String name = cr.getString(cr.getColumnIndex(DatabaseHelper.colName));
int amount = cr.getInt(cr.getColumnIndex(DatabaseHelper.colAmount));
String purpose = cr.getString(cr.getColumnIndex(DatabaseHelper.colPurpose));
String Terms = cr.getString(cr.getColumnIndex(DatabaseHelper.colTermsClass));
String Status = cr.getString(cr.getColumnIndex(DatabaseHelper.colStatClass));
String date = cr.getString(cr.getColumnIndex(DatabaseHelper.colDate));
String editdate = cr.getString(cr.getColumnIndex(DatabaseHelper.colEditDate));
Account acc = new Account(name, amount, purpose, db.GetTermsID(Terms),date,editdate,db.GetStatID(Status));
acc.SetID((int) id);


Intent myIntent = new Intent(AccountManager.this, AccountDetails.class);
myIntent.putExtra("AccountObject", acc);
startActivityForResult(myIntent, 0);


} catch (Exception ex) {
Alerts.CatchError(AccountManager.this, ex.toString());
}
}


});
} catch (Exception ex) {

}

AccountManagement 最终 fragment :

 @Override
public void onCreate(Bundle savedInstanceState) {


final Account Acc = (Account) getIntent().getSerializableExtra("AccountObject");

super.onCreate(savedInstanceState);
setContentView(R.layout.accdetails);

Linlay = (LinearLayout) findViewById(R.id.Linlay);
spinStat = (Spinner) findViewById(R.id.spinStat);
spinTerm = (Spinner) findViewById(R.id.spinTerm);
txtName = (EditText) findViewById(R.id.txtDelName);
txtAmt = (EditText) findViewById(R.id.txtDelAmt);
txtPurpose = (EditText) findViewById(R.id.txtDelPurpose);
spinTerm = (Spinner) findViewById(R.id.spinTerm);
txtDate = (TextView) findViewById(R.id.colDate);
txtEditDate = (TextView) findViewById(R.id.colEditDate);
spinStat = (Spinner) findViewById(R.id.spinStat);


Utilities.ManageTermSpinner(AccountDetails.this, spinTerm);
for(int i=0;i<spinTerm.getCount();i++)
{
long id=spinTerm.getItemIdAtPosition(i);
if(id==Acc.getTerms())
{
spinTerm.setSelection(i, true);
break;
}
}

Utilities.ManageStatSpinner(AccountDetails.this, spinStat);
for(int j=0;j<spinStat.getCount();j++)
{
long id=spinStat.getItemIdAtPosition(j);
if(id==Acc.getStatus())
{
spinStat.setSelection(j, true);
break;
}
}


txtName.setText(Acc.getName());
txtAmt.setText(String.valueOf(Acc.getAmt()));
txtPurpose.setText(Acc.getPurpose());



Button delete = (Button) findViewById(R.id.delete);
delete.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
AlertDialog diag = Alerts.DeleteConfirm(AccountDetails.this, Acc );
diag.show();
}
});

Button modify = (Button) findViewById(R.id.modify);
modify.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
AlertDialog diag = Alerts.ShowEditDialog(AccountDetails.this, Acc);
diag.show();
}
});
}

最佳答案

您并没有将该“acc”对象放入 Bundle 中,而是在此处以空 Intent 启动 AccountDetails Activity 。

这是一个例子:Send object from one activity to another Activity using Intent

关于Android SQLite 将 gridview 中选择的 Item 传递给另一个 Activity 进行编辑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28794910/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com