简体   繁体   English

将 ListView 值传递给另一个 Activity 中的多个 EditText

[英]Pass ListView values to multiple EditText in another Activity

I have an Activity that has two clickable EditTexts and I am trying to pass value from two different ListView Activities.我有一个 Activity 有两个可点击的 EditTexts,我试图从两个不同的 ListView 活动传递值。 Every time I try to populate value to the second EditText, the value of the other EditText is cleared.每次我尝试将值填充到第二个 EditText 时,其他 EditText 的值都会被清除。

I need help in figuring out where I am wrong and a possible resolution.我需要帮助来找出我错在哪里以及可能的解决方案。

This is the code for the Activity with both EditTexts这是带有两个 EditTexts 的 Activity 的代码

 @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.book_seat);


        //Departure
        depart = (EditText)findViewById(R.id.departure_terminal);
        // This is a listener for the one way departure terminal
        depart.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(BookSeat.this,TerminalList.class);
                startActivity(intent);
            }
        });
        // Receiving value into activity using intent.
        String TempHolder = getIntent().getStringExtra("ListViewClickedValue");
        // Setting up received value into EditText.
        depart.setText(TempHolder);


        //Arrival
        arrive = (EditText)findViewById(R.id.arrival_terminal);
        // This is a listener for the one way arrival terminal
        arrive.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(BookSeat.this,ArrivalTerminalList.class);
                startActivity(intent);
            }
        });
        // Receiving value into activity using intent.
        String TempHolder_1 = getIntent().getStringExtra("ArrivalListViewClickedValue");
        // Setting up received value into EditText.
        arrive.setText(TempHolder_1);

This is the code for the first ListView这是第一个 ListView 的代码

public class TerminalList extends AppCompatActivity {

    ListView listView;

    // Define string array.
    String[] listValue = new String[] {"Anambra => Awka","Delta(South-East) => Asaba(Onitsha)","Enugu => Enugu",
            "FCT Abuja => Kubwa","Imo => Owerri","Kaduna => Kaduna","Lagos => Cele/Okota","Lagos => Festac(MazaMaza)","Plateau => Jos"};

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.terminal_list);

        listView = (ListView)findViewById(R.id.listView1);
        ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1, android.R.id.text1, listValue);

        listView.setAdapter(adapter);

        // ListView on item selected listener.
        listView.setOnItemClickListener(new AdapterView.OnItemClickListener()
        {
            @Override
            public void onItemClick(AdapterView<?> parent, View view,
                                    int position, long id) {
                // TODO Auto-generated method stub

                // Getting listview click value into String variable.
                String ListViewClickedValue = listValue[position].toString();

                Intent intent = new Intent(TerminalList.this, BookSeat.class);

                // Sending value to another activity using intent.
                intent.putExtra("ListViewClickedValue", ListViewClickedValue);

                startActivity(intent);
                finish();

            }
        });
    }
}

This is the code for the second ListView这是第二个 ListView 的代码

public class ArrivalTerminalList extends AppCompatActivity {

    ListView listView;

    // Define string array.
    String[] listValue = new String[] {"Anambra => Awka","Delta(South-East) => Asaba(Onitsha)","Enugu => Enugu",
            "FCT Abuja => Kubwa","Imo => Owerri","Kaduna => Kaduna","Lagos => Cele/Okota","Lagos => Festac(MazaMaza)","Plateau => J-Town"};

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.arrival_terminal_list);

        listView = (ListView)findViewById(R.id.listView2);
        ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1, android.R.id.text1, listValue);

        listView.setAdapter(adapter);

        // ListView on item selected listener.
        listView.setOnItemClickListener(new AdapterView.OnItemClickListener()
        {

            @Override
            public void onItemClick(AdapterView<?> parent, View view,
                                    int position, long id) {
                // TODO Auto-generated method stub

                // Getting listview click value into String variable.
                String ArrivalListViewClickedValue = listValue[position].toString();

                Intent intent = new Intent(ArrivalTerminalList.this, BookSeat.class);

                // Sending value to another activity using intent.
                intent.putExtra("ArrivalListViewClickedValue", ArrivalListViewClickedValue);

                startActivity(intent);

            }
        });
    }
}

When you start a new activity, your data from current activity intent won't be sent.当您开始新活动时,不会发送来自当前活动意图的数据。 You can either forward your data or you can start these activities for result.您可以转发您的数据,也可以开始这些活动以获得结果。 You can use startActivityForResult() to start your activities and receive result in the original activity.您可以使用startActivityForResult()开始您的活动并在原始活动中接收结果。 Instead of calling startActivity() you need to call startActivityForResult()您需要调用startActivity()而不是调用startActivityForResult()

startActivityForResult(intent, ARRIVAL_REQUEST_CODE);    // ARRIVAL_REQUEST_CODE is arbitrary number >= 0

then in your arrival activity, when returning the result, you need to set the result that will be returned to BookSeat activity然后在您的到达活动中,返回结果时,您需要设置将返回到BookSeat活动的结果

@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
    ...

    Intent result = new Intent();
    result.putExtra("ArrivalListViewClickedValue", ArrivalListViewClickedValue);
    setResult(Activity.RESULT_OK, result);
    finish();
}

and finally to handle the result, you need to override function in BookSeat activity that will be called when you receive result from your ArrivalTerminalList activity.最后要处理结果,您需要覆盖BookSeat活动中的函数,当您从ArrivalTerminalList活动收到结果时将调用该函数。

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent resultIntent) {
    if (requestCode == ARRIVAL_REQUEST_CODE) {
        if (resultCode == RESULT_OK) {
            String arrivalValue = resultIntent.getStringExtra("ArrivalListViewClickedValue");
            arrive.setText(arrivalValue);    // You can make 'arrive' instance variable and initialize it in onCreate
        }
    }
}

You can do the same for departure activity.您可以对出发活动执行相同的操作。 The advantage of this solution is that now your back stack will not be filling up because instead of starting new activity, you just return a result to previous activity.此解决方案的优点是现在您的后台堆栈不会被填满,因为您无需启动新活动,而只需将结果返回到之前的活动。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM