Android使用intent编辑列表详细信息中的DB记录



我想使用ListDetail编辑我的DB记录。目前我的项目显示列表按天排序的练习视图。当你点击列表位置时,你会得到一个包含练习细节的新窗口。有两个按钮:编辑和删除。删除按钮使用意向很好,但我不知道如何轻松地使编辑按钮工作。我该怎么办才能解决那个问题?

以下是我的课程:

ListExerciseFragment-显示listView 的片段

public class ListExercisesFragment extends Fragment {
String TAG="ListExercisesFragment";
private ExercisesDbAdapter dbHelper;
private ListView listView;
private ArrayList<Exercise> lExercise=new ArrayList<Exercise>();
private CustomListAdapter dataAdapter;
private static  final int REQUEST_CODE=100;
public ListExercisesFragment(){
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.list_fragment, container, false);
listView = (ListView) view.findViewById(R.id.listView1);
dbHelper = new ExercisesDbAdapter(getActivity());
dbHelper.open();
displayListView();
listView.setOnItemClickListener(new AdapterView.OnItemClickListener(){
public void onItemClick(AdapterView<?> parent,View view,int position,long id){
Exercise exercise=(Exercise) listView.getItemAtPosition(position);
//wysyłam dane do ListDetail
Intent intent = new Intent(getContext(),ListDetail.class);
intent.putExtra("id",exercise.getId());
intent.putExtra("name",exercise.getName());
intent.putExtra("series",exercise.getSeries());
intent.putExtra("reps",exercise.getReps());
intent.putExtra("weights",exercise.getWeights());
intent.putExtra("notes",exercise.getNotes());
intent.putExtra("date",exercise.getDate());
startActivityForResult(intent,REQUEST_CODE);
}
});
return view;
}
@Override
public void onActivityResult(int requestCode,int resultCode,Intent data){
if(requestCode==REQUEST_CODE){
int id=data.getIntExtra("id",-1);
if(id!=-1){
Log.d(TAG,"success"+Integer.toString(id));
deleteExerciseWithID(id);
}
else{
Log.d(TAG,"not working");
}
}
super.onActivityResult(requestCode,resultCode,data);
}

private void deleteExerciseWithID(int id){
for(Exercise e:lExercise){
if( e.getId()==id ){
dbHelper.deleteRowWithId(id);
lExercise.remove(e);
dataAdapter.notifyDataSetChanged();
break;
}
}
}
private void displayListView() {
Cursor cursor = dbHelper.fetchAllExercises();
cursor.moveToFirst();
while (cursor.moveToNext()) {
int _id = cursor.getColumnIndex(ExercisesDbAdapter.KEY_ROWID);
int name = cursor.getColumnIndex(ExercisesDbAdapter.KEY_NAME);
int series = cursor.getColumnIndex(ExercisesDbAdapter.KEY_SERIES);
int reps = cursor.getColumnIndex(ExercisesDbAdapter.KEY_REPS);
int weights = cursor.getColumnIndex(ExercisesDbAdapter.KEY_WEIGHTS);
int notes = cursor.getColumnIndex(ExercisesDbAdapter.KEY_NOTES);
int date = cursor.getColumnIndex(ExercisesDbAdapter.KEY_DATE);
Exercise exercise = new Exercise();
exercise.setId(cursor.getInt(_id));
exercise.setName(cursor.getString(name));
exercise.setSeries(cursor.getInt(series));
exercise.setReps(cursor.getInt(reps));
exercise.setWeights(cursor.getInt(weights));
exercise.setNotes(cursor.getString(notes));
exercise.setDate(cursor.getString(date));

lExercise.add(exercise);
}
Collections.sort(lExercise);

dataAdapter = new CustomListAdapter(getActivity(),0, lExercise);
// Assign adapter to ListView
listView.setAdapter(dataAdapter);

}
}

ListDeatil-有意图的类,目前它正在显示练习的详细信息,并通过单击删除按钮删除该练习

public class ListDetail extends AppCompatActivity {
String TAG="ListDetails";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.list_detail);
final int id=getIntent().getIntExtra("id",-1);
String name=getIntent().getStringExtra("name");
int series=getIntent().getIntExtra("series",-1);
int reps=getIntent().getIntExtra("reps",-1);
int weights=getIntent().getIntExtra("weights",-1);
String date=getIntent().getStringExtra("date");
String notes=getIntent().getStringExtra("notes");
TextView txtName=(TextView) findViewById(R.id.detail_name);
TextView txtSeries=(TextView) findViewById(R.id.detail_series);
TextView txtReps=(TextView) findViewById(R.id.detail_reps);
TextView txtWeights=(TextView) findViewById(R.id.detail_weights);
TextView txtNotes=(TextView) findViewById(R.id.detail_notes);
TextView txtDate=(TextView) findViewById(R.id.detail_date);

txtName.setText(name);
txtDate.setText(date);
txtSeries.setText(Integer.toString(series));
txtReps.setText(Integer.toString(reps));
txtWeights.setText(Integer.toString(weights));
txtNotes.setText(notes);
Log.d(TAG,"Got id: "+Integer.toString(id));
Button btnDelete=(Button) findViewById(R.id.btn_delete);
btnDelete.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v){
Intent intent=new Intent();
intent.putExtra("id",id);
setResult(RESULT_OK,intent);
finish();
}
});
}
@Override
public void onBackPressed() {
Intent intent=new Intent();
setResult(RESULT_OK,intent);
finish();
}
}

当前视图如下所示:ListDetail视图截图

我在考虑创建EditTexts,默认情况下使其GONE,当你点击EDIT按钮时,ListDetails类中的TextViews的可见性GONE,EditTexts是可见的,有了TextViews中的信息,你就可以编辑它了。老实说,我不知道该怎么写。谢谢你的帮助。

试试这个:

我创建了带有两个活动的Demo,一个是MainActivity.class,它是启动器活动,第二个是SecondActivity.class,它是第二个活动。请通过这两个活动你会得到的想法:

主要活动.class

@Overrideprotected void onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);Intent iv=新Intent(MainActivity.this,SecondActivity.class);startActivityForResult(iv,1);}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
switch (resultCode){
case 1:
Log.d("Edit","Edit");
break;
case 2:
Log.d("Delete","Delete");
break;
}
}

SecondActivity.class

bt_edit=(按钮)findViewById(R.id.bt_edit);bt_delete=(按钮)findViewById(R.id.bt_delete);

bt_edit.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
setResult(1);
finish();
}
});

bt_delete.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
setResult(2);
finish();
}
});

请检查日志,一旦您单击编辑,它将转到onActivityResult的EditPart,如果您单击删除,它将重定向到onActivityResult的delete Part。希望这对你有帮助。

最新更新