Android工作室将ListView传递给另一个活动

问题描述:

我想将数组列表传递给另一个活动,但似乎还不够。我整天搜索以“intent”传递数组列表,但没有成功。我为学习目的写了一段代码。如何传递数据并在第二个活动中显示Arraylist?Android工作室将ListView传递给另一个活动

动作按钮是btn_save。如果你想了解更多细节,请告诉我。

的代码是

MainActivity(第一项活动):

public class MainActivity extends AppCompatActivity { 

    ArrayList<String> addArray = new ArrayList<>(); 


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

     final EditText editTextOne = (EditText) findViewById(R.id.editTextOne); 
     final EditText editTextTwo = (EditText) findViewById(R.id.editTextTwo); 
     Button btn_showText = (Button) findViewById(R.id.buttonShow); 
     final TextView textView = (TextView) findViewById(R.id.textResults); 
     Button btn_refresh = (Button) findViewById(R.id.btn_refresh); 
     Button btn_close = (Button) findViewById(R.id.btn_close); 
     Button btn_save = (Button) findViewById(R.id.btn_save); 
     final ListView showMe = (ListView) findViewById(R.id.list_items); 

     btn_showText.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       String text = editTextOne.getText().toString(); 
       String textTwo = editTextTwo.getText().toString(); 

       if (text.length() == 0 || textTwo.length() == 0){ 
        textView.setText("You must enter Name & Surname"); 
       }else { 
        textView.setText(Html.fromHtml(

          "<font color=\"red\">"+ text + "</font> " + 
            "<font color=\"blue\"><b>" + textTwo + " </b></font>")); 
       } 
      } 
     }); 
     btn_refresh.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       finish(); 
       startActivity(getIntent()); 
      } 
     }); 
     btn_close.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       finish(); 
       System.exit(0); 
      } 
     }); 

     btn_save.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
//    Context context = getApplicationContext(); 
//    CharSequence mytext = "Hahahaha"; 
//    int duration = Toast.LENGTH_SHORT; 
//    Toast toast = Toast.makeText(context,mytext,duration); 
//    toast.show(); 
       String text = editTextOne.getText().toString(); 
       String textTwo = editTextTwo.getText().toString(); 
       String getInput = text + textTwo; 
       if (addArray.contains(getInput)){ 
        Toast.makeText(getBaseContext(), "Item already Added!", Toast.LENGTH_LONG).show(); 
       } 
       else if (getInput == null || getInput.trim().equals("")){ 
        Toast.makeText(getBaseContext(), "Input field is empty", Toast.LENGTH_LONG).show(); 
       } 
       else{ 
        addArray.add(getInput); 
        ArrayAdapter<String> adapter = new ArrayAdapter<>(MainActivity.this, android.R.layout.simple_list_item_1, addArray); 
        showMe.setAdapter(adapter); 
        Intent intent = new Intent(MainActivity.this, ListOfNames.class); 

        ((EditText)findViewById(R.id.editTextOne)).setText(" "); 
        ((EditText)findViewById(R.id.editTextTwo)).setText(" "); 
       } 
      } 
     }); 


    } 

    public void onButtonClick(View v){ 

     if (v.getId() == R.id.btn_list){ 
      Intent i = new Intent(MainActivity.this, ListOfNames.class); 
      startActivity(i); 
     } 

    } 

} 

ListOfNames次活动:(几乎是空的)

public class ListOfNames extends Activity { 


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

    } 
} 
+0

更多详情?是。错误日志怎么样? –

+0

请参阅下面的答案,作为我第二次尝试解决方案。该应用程序运行没有错误,但有一个问题,当我试图给我的数组列表添加第二个值。它只提供最后一个值。有什么想法吗? –

如果你想传递字符串的数组列表那么它会很容易。只是通过ArrayList的意图是这样的:

ArrayList<String> list = new ArrayList<String>(); 
Intent intent = new Intent(ActivityOne.this, ActivityTwo.class); 
intent.putStringArrayListExtra("key", list); 
startActivity(intent); 

并接受它ActivityTwo这样的:

ArrayList<String> list = getIntent().getStringArrayListExtra("key"); 
+0

您非常接近解决方案,但无法正常工作。我整天都试过。点击按钮后,我的应用程序关闭。 –

+0

@Vasilis希腊任何例外? –

+0

请参阅下面的答案。该应用程序运行没有错误,但有一个问题,当我试图给我的数组列表添加第二个值。它只提供最后一个值。有什么想法吗? –

我发现这个临时的解决方案(该应用程序没有被破坏)。唯一的问题是arraylist没有增加。它包含并只显示最后一个值。

主要活动:

... 

else{ 
// addArray.add(getInput); 
// ArrayAdapter<String> adapter = new ArrayAdapter<>(MainActivity.this, android.R.layout.simple_list_item_1, addArray); 
//     showMe.setAdapter(adapter); 
    Intent intent = new Intent(MainActivity.this, ListOfNames.class); 
    intent.putExtra("data", getInput); 
    startActivity(intent); 

// ((EditText)findViewById(R.id.editTextOne)).setText(" "); 
// ((EditText)findViewById(R.id.editTextTwo)).setText(" "); 
       } 
... 

ListOfNames(次活动):

public class ListOfNames extends Activity { 
    ArrayList<String> addArrayT = new ArrayList<>(); 

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

     Bundle bundle = getIntent().getExtras(); 
     String data = bundle.getString("data"); 
     Button btn_more = (Button) findViewById(R.id.btn_more); 

     ListView showMe = (ListView) findViewById(R.id.list_items); 
     addArrayT.add(data); 
     ArrayAdapter<String> adapterT = new ArrayAdapter<>(ListOfNames.this, android.R.layout.simple_list_item_1, addArrayT); 
     showMe.setAdapter(adapterT); 

    } 
    public void onClickMore(View v){ 

     if (v.getId() == R.id.btn_more){ 
      Intent i = new Intent(ListOfNames.this, MainActivity.class); 
      startActivity(i); 
     } 
    } 
}