处理意图

时间:2016-06-17 15:47:19

标签: android listview

我有一个添加任务的按钮..当我按下它时,它会带我到另一个活动来填充任务细节,例如(任务名称,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
            }
        });

    }
}

3 个答案:

答案 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 函数来设置将在第一个活动中检查的结果代码,并调用完成()以从活动中删除此活动堆叠并返回第一个。

**我不确定您的数组适配器实例化是否存在错误。*