首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >编辑列表视图中的条目

编辑列表视图中的条目
EN

Stack Overflow用户
提问于 2015-08-23 20:52:42
回答 1查看 2.6K关注 0票数 2

我正在开发一个简单的日志应用程序,让用户输入一个时间和一个注释,然后在一个专用活动( ListViewMainActivty)中显示输入的数据。时间和数据被输入到带有两个EditText的单独活动(EditText)中,并在通过适配器(TimeTrackerAdapter)点击保存按钮时传递给MainActivity。或者,当用户改变主意时,可以按下取消按钮。可以通过动作栏默认菜单中的add按钮访问AddTimeActivity。现在我添加了一个delete按钮-which运行良好,列表中的每一行都添加了一个编辑按钮。现在的问题是:我如何添加编辑功能而不进行专门用于编辑的新活动。换句话说,如何使AddTimeActivity在编辑和添加的同时工作,如何使我的应用程序知道用户点击add按钮并使用空EditText启动AddTimeActivity,或者用户点击列表中某一行中的编辑按钮,将要编辑的数据传递给AddTimeActivity,并将它们显示在EditText中,并将编辑后的数据保存在相同的条目中?很抱歉没有表现出任何尝试,但实际上我对这个问题一无所知。

MainActivity.java

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public 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);
    }
}

AddTimeActivityonSaveonCancel是按钮的方法:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public class AddTimeActivity extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.add_time);
    }

    public void onCancel(View view) {
        finish();
    }

    public void onSave(View view) {
        Intent intent = new Intent(AddTimeActivity.this, MainActivity.class);
        EditText timeEditText = (EditText) findViewById(R.id.Time_Edit_Text);
        String time = timeEditText.getText().toString();
        EditText noteEditText = (EditText) findViewById(R.id.Note_Edit_Text);
        String note = noteEditText.getText().toString();
        intent.putExtra("time", time);
        intent.putExtra("note", note);
        this.setResult(RESULT_OK, intent);
        finish();
    }
}

TimeTrackerAdapter.java:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public class TimeTrackerAdapter extends BaseAdapter {
    public ArrayList<TimeRecord> times = new ArrayList<TimeRecord>();

    @Override
    public int getCount() {
        return times.size();
    }

    public TimeTrackerAdapter() {
        times.add(new TimeRecord("12:30", "this is the best"));
        times.add(new TimeRecord("2:30", "I need this"));
    }

    @Override
    public Object getItem(int position) {
        return times.get(position);
    }

    public void addTimeRecord(TimeRecord timeRecord) {
        times.add(timeRecord);
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    @Override
    public View getView(final int position, View view, ViewGroup parent) {
        if (view == null) {
            LayoutInflater inflater = LayoutInflater.from(parent.getContext());
            view = inflater.inflate(R.layout.menu_layout, parent, false);
        }
        TextView timeView = (TextView) view.findViewById(R.id.time_textView);
        TextView noteView = (TextView) view.findViewById(R.id.note_TextView);
        Button deleteButton = (Button) view.findViewById(R.id.delete_entry);
        deleteButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                times.remove(position);
                notifyDataSetChanged();
            }
        });
        TimeRecord time = times.get(position);
        timeView.setText(time.getTime());
        noteView.setText(time.getNote());
        return view;
    }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-08-23 23:02:57

问题是

如何添加编辑功能而不进行专门用于编辑的新活动。

或者,更广泛地说,

“我怎样才能把信息交给我所呼叫的活动呢?”

您可以通过在启动活动的意图中添加额外的内容来实现这一点。例如,在调用‘MainActivity()’之前,在“startActivityForResult”中:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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()‘方法中,您会质疑额外的意图:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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(位置)”中传递出来,作为对意图的额外补充。

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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));
    }

这样,您的其他活动就可以检查该包是否存在。如果没有,你就有一个“加法”的例子。否则,您就会遇到“编辑”的情况。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32174666

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文