我有一个添加任务的按钮..当我按下它时,它会带我到另一个活动来填充任务细节,例如(任务名称,desc,duedate..etc),当我按下保存它必须将任务名称仅传输到第一个活动,以将其保存在列表视图中。我没有任何错误,但(不幸的是,应用程序已停止)发生在运行时错误。请帮我 !!
public class MainActivity extends AppCompatActivity {
Button add;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
add = (Button) findViewById(R.id.add);
add.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent i = new Intent(v.getContext(),addtask.class);
startActivityForResult(i,0);
}
});
Intent intent= getIntent();
String task= intent.getStringExtra("task");
ArrayList<String> mylist=new ArrayList<String>();
ListView lv=(ListView) findViewById(R.id.listview);
mylist.add(task);
ArrayAdapter<String> adapter=new ArrayAdapter<String>(MainActivity.this,R.layout.activity_main,R.id.listview, mylist);
lv.setAdapter(adapter);
}}
和我的第二堂课(活动2)
public class addtask extends Activity {
Button save;
EditText tasktxt;
public static String task;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.dolist);
tasktxt= (EditText) findViewById(R.id.tasktxt);
task= tasktxt.getText().toString();
save= (Button) findViewById(R.id.save);
save.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v) {
Intent intent = new Intent(addtask.this,MainActivity.class);// define the intent
intent.putExtra("task",task); // store the message in "message"
startActivityForResult(intent,0); // calling the other activity
}
});
}
}
答案 0 :(得分:0)
您应该在 MainActivity 中覆盖onActivityResult
。
并且startActivityForResult()
在 addtask 中使用setResult(Activity.RESULT_OK, intent);
的内容
答案 1 :(得分:0)
在您应该执行的addtask
活动中:
save.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v) {
Intent returnIntent = new Intent();
returnIntent.putExtra("task",task); // store the message in "message"
setResult(Activity.RESULT_OK,returnIntent);
finish();
}
});
然后在您的MainActivity中,您应该覆盖onActivityResult
(您将从addtask那里获得意图):
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == 0) {
if(resultCode == Activity.RESULT_OK){
// You can remove this code from onCreate
String task= data.getStringExtra("task");
ArrayList<String> mylist=new ArrayList<String>();
ListView lv=(ListView) findViewById(R.id.listview);
mylist.add(task);
ArrayAdapter<String> adapter=new ArrayAdapter<String>(MainActivity.this,R.layout.activity_main,R.id.listview, mylist);
lv.setAdapter(adapter);
}
}
}
答案 2 :(得分:0)
我认为你的第一个活动可以是这样的:
Button add;
ListView lv;
ArrayList<String> mylist=new ArrayList<String>();
ArrayAdapter<String> adapter;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
add = (Button) findViewById(R.id.add);
lv=(ListView) findViewById(R.id.listview);
adapter=new ArrayAdapter<String>
(MainActivity.this,R.layout.activity_main,R.id.listview, mylist);
lv.setAdapter(adapter);
add.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent i = new Intent(v.getContext(),addtask.class);
startActivityForResult(i,0);
});
}
@Override //to receive result
protected void onActivityResult(int requestCode, int resultCode, Intent
data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == 0) {
if (resultCode == RESULT_OK) {
//Use data intent to get string
String task = data.getStringExtra("task");
//adding new task
mylist.add(task);
arrayAdapter.notifyDataSetChanged();
}
}
}
}
第二项活动是这样的:
public class addtask extends Activity {
Button save;
EditText tasktxt;
public static String task;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.dolist);
tasktxt= (EditText) findViewById(R.id.tasktxt);
task= tasktxt.getText().toString();
save= (Button) findViewById(R.id.save);
save.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v) {
Intent intent = new Intent(addtask.this,MainActivity.class);
//define the intent
intent.putExtra("task",task);
setResult(RESULT_OK, intent);
finish();
}
});
}
在Frist Activity中你必须覆盖 onActivityResult 函数,因为当你将数据从第二个活动返回到第一个活动时,android系统会调用这个函数。
在第二个活动中,您调用 setResult 函数来设置将在第一个活动中检查的结果代码,并调用完成()以从活动中删除此活动堆叠并返回第一个。
**我不确定您的数组适配器实例化是否存在错误。*