在列表视图中编辑条目

时间:2015-08-24 04:52:43

标签: android android-listview

我正在使用一个简单的日志应用程序,该应用程序允许用户输入时间和注释,然后在ListView的专用活动(MainActivty)中显示输入的数据。时间和数据在单独的活动(AddTimeActivity)中输入,其中包含两个EditText,并在通过适配器点击保存按钮时传递给MainActivity {{1 }})。或者,当用户改变主意时,可以按下取消按钮。可以通过操作栏默认菜单中的添加按钮访问TimeTrackerAdapter。现在我已经添加了一个正常工作的删除按钮和一个编辑按钮到列表中的每一行。现在问题是:如何在不进行专门编辑的新活动的情况下添加编辑功能。换句话说,如何让AddTimeActivity同时进行编辑和添加,如何让我的应用知道用户点击了添加按钮并以AddTimeActivity为空{{} 1}},或者用户点击了列表中某一行中的修改按钮,并将要编辑的数据传递给AddTimeActivity并将其显示在EditText&#中39; s并将编辑后的数据保存在同一条目中?很抱歉没有显示任何尝试,但我实际上对这个问题一无所知。

MainActivity.java

AddTimeActivity

EditTextpublic class MainActivity extends AppCompatActivity { public TimeTrackerAdapter timeTrackerAdapter; public int TIME_ENTRY_REQUEST_CODE = 1; protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ListView listView = (ListView) findViewById(R.id.time_list); timeTrackerAdapter = new TimeTrackerAdapter(); listView.setAdapter(timeTrackerAdapter); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. super.onCreateOptionsMenu(menu); MenuInflater menuInflater = getMenuInflater(); menuInflater.inflate(R.menu.menu_main, menu); return true; } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == TIME_ENTRY_REQUEST_CODE) { if (resultCode == RESULT_OK) { Bundle bundle = data.getExtras(); String time = bundle.getString("time"); String note = bundle.getString("note"); TimeRecord timeRecord = new TimeRecord(time, note); timeTrackerAdapter.addTimeRecord(timeRecord); timeTrackerAdapter.notifyDataSetChanged(); } } } @Override public boolean onOptionsItemSelected(MenuItem item) { // Handle action bar item clicks here. The action bar will // automatically handle clicks on the Home/Up button, so long // as you specify a parent activity in AndroidManifest.xml. int id = item.getItemId(); // noinspection SimplifiableIfStatement if (id == R.id.add_time_item) { Intent intent = new Intent(getApplicationContext(), AddTimeActivity.class); startActivityForResult(intent, TIME_ENTRY_REQUEST_CODE); return true; } else if (id == R.id.about) { Intent aboutIntent = new Intent(getApplicationContext(), AboutScreen.class); startActivity(aboutIntent); } return super.onOptionsItemSelected(item); } } AddTimeActivity是按钮'方法:

onSave

TimeTrackerAdapter.java:

onCancel

1 个答案:

答案 0 :(得分:2)

问题是

  

如何在不制作专门用于编辑的新活动的情况下添加编辑功能。

或者更一般地说,

“如何将信息移交给我正在呼叫的活动?”

您可以通过向用于启动活动的intent添加额外内容来实现此目的。例如,在调用'startActivityForResult()之前的'MainActivity'中:

Intent intent = new Intent(this, MyOtherActivity.class);
// in your case, 'extraInformation' could be a boolean (add = yes|no)
intent.putExtra("MyExtraInformationKey", extraInformation);
startActivityForResult(intent,TIME_ENTRY_REQUEST_CODE);

然后在另一个活动的'onCreate()'方法中,你质疑额外的意图:

Intent i = getIntent();
if (i != null && i.hasExtra(getString("MyExtraInformationKey"))
{
    boolean myInfo = i.getBooleanExtra("MyExtraInformationKey");
    // proceed as appropriate...
}

对于ListView行中按钮的情况,您可以使OnClickListener方法调用“MainActivity”中的另一个方法(如'doCallMayOtherActivity()'),移交所有相关信息(如'times'ArrayList中的位置)。 然后,此方法将启动您的添加/编辑活动,将旧数据从包中的'times.get(position)'作为额外的意图传递出去。

要从适配器类访问“MainActivity”中的方法,可以在“getView()”中使用以下代码

Button editButton=(Button) view.findViewById(R.id.edit_entry);
editButton.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {

         ((MainActivity)parent.getContext()).doCallMyOtherActivity(times.get(position));
    }

这样,您的其他活动可以检查该捆绑包的存在。如果没有,则表示“添加”。否则,你有一个'编辑'的案例。