【问题标题】:Pass ListView values to multiple EditText in another Activity将 ListView 值传递给另一个 Activity 中的多个 EditText
【发布时间】:2020-05-12 07:59:01
【问题描述】:

我有一个 Activity,它有两个可点击的 EditText,我试图从两个不同的 ListView Activity 传递值。每次我尝试将值填充到第二个 EditText 时,都会清除另一个 EditText 的值。

我需要帮助找出我错在哪里以及可能的解决方案。

这是带有两个 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);

这是第一个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();

            }
        });
    }
}

这是第二个 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);

            }
        });
    }
}

【问题讨论】:

标签: java android android-studio listview


【解决方案1】:

当您开始一项新活动时,不会发送来自当前活动意图的数据。您可以转发您的数据,也可以启动这些活动以获得结果。您可以使用startActivityForResult() 开始您的活动并在原始活动中接收结果。而不是调用startActivity(),你需要调用startActivityForResult()

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

那么在你的到达activity中,返回结果的时候,需要设置将返回的结果为BookSeatactivity

@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();
}

最后要处理结果,您需要覆盖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
        }
    }
}

您可以对出发活动执行相同的操作。此解决方案的优点是,现在您的后台堆栈不会被填满,因为您无需开始新的活动,而是将结果返回到先前的活动。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-12-29
    • 1970-01-01
    • 2020-07-14
    • 2016-01-18
    • 2016-08-09
    • 2017-05-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多