2017-12-12 15 views
0

이 문제에 대한 도움을 주시면 감사하겠습니다. 한 활동에서 동적으로 생성 된 EditTexts에 사용자가 입력 할 데이터를 가져 와서 다른 활동의 TextViews에 데이터를 저장하려고합니다. 사실이 웹 사이트의 다른 곳에서 비슷한 질문을 찾았지만 문제를 직접 해결할 수 없기 때문에 코드에서 누군가에게 뛰어 드는 것이 있다고 생각했습니다. 여러 가지 방법으로이 작업을 수행하려고 노력 했으므로 코드가 불편할 수 있습니다. 좌절감을 느껴서 코드를 작동 시키려고 점점 더 구현하려고 시도했기 때문입니다.다른 활동에서 동적으로 생성 된 편집 텍스트에서 데이터 가져 오기

활동 A (사용자가 입력 한 숫자를 기반으로 많은 수의 EditText가 생성되고 사용자가 EditTexts에 입력 한 내용을 배열 ???에서 가져 와서 활동 B로 이동해야합니다.

final Button submitButton = new Button(this); 
    submitButton.setText("Submit"); 
    submitButton.setOnClickListener(new View.OnClickListener(){ 
     public void onClick(View v){ 
      Intent intent = new Intent(ChoiceMaker.this, Randomizer.class); 
      startActivity(intent); 
      setContentView(R.layout.randomizer); 

     } 
    }); 


    btnCreate.setOnClickListener(new View.OnClickListener() { 
     public List<EditText> strings; 

     @Override 
     public void onClick(View v) { 
      List<EditText> allEds = null; 
      if (edtNoCreate.getText().toString().length() > 0) { 
       try { 
        lnrDynamicEditTextHolder.removeAllViews(); 
       } catch (Throwable e) { 
        e.printStackTrace(); 
       } 

       int length = Integer.parseInt(edtNoCreate.getText().toString()); 
       EditText editText; 
       allEds = new ArrayList<EditText>(); 

       for (int i = 0; i < length; i++) { 
        editText = new EditText(ChoiceMaker.this); 
        allEds.add(editText); 
        editText.setId(i + 1); 
        editText.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT)); 
        editText.setHint("Possible choice " + (i + 1)); 
        editText.setTextColor(Color.parseColor("#c0b1ff")); 
        editText.setTextSize(38); 
        lnrDynamicEditTextHolder.addView(editText); 


       } 


       LinearLayout layout = (LinearLayout) findViewById(R.id.choiceMakerLayout); 
       layout.addView(submitButton); 
       submitButton.setBackgroundColor(Color.BLUE); 

       String[] strings = new String[allEds.size()]; 

       for(int i=0; i < allEds.size(); i++){ 
        strings[i] = allEds.get(i).getText().toString(); 
       } 

       Intent intent = new Intent(ChoiceMaker.this, Randomizer.class); 
       intent.putExtra("strings", strings); 

      } 

     } 

    } 

활동 B

이 경우
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.randomizer); 

    Intent intent = getIntent(); 
    String[] stringArray = intent.getStringArrayExtra("strings"); 
    int textViewCount = 10; 

    TextView[] textViewArray = new TextView[textViewCount]; 

    for (int i = 0; i < textViewCount; i++) { 
     textViewArray[i] = new TextView(this); 
     textViewArray[i].setText(stringArray); 



}} 
+0

, 버튼 클릭에를 내가 디버깅 할 때 그 배열을 보여줍니다 null로. 데이터가 Activity A의 배열에 들어 가지 않을 수도 있습니다. – Dragon

답변

0

, 의견을 작성하는 동안 당신은 , 당신은 "태그"로 만들고있는 뷰를 추적 할 필요가 아래처럼 할

   for (int i = 0; i < length; i++) { 
        editText = new EditText(ChoiceMaker.this); 
        allEds.add(editText); 

        editText.setTag(i); //mark this step 

        editText.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT)); 
        editText.setHint("Possible choice " + (i + 1)); 
        editText.setTextColor(Color.parseColor("#c0b1ff")); 
        editText.setTextSize(38); 
        lnrDynamicEditTextHolder.addView(editText); 
       } 

당신은 예를 들어, 데이터를 전달하는 다른 활동을 시작할 때마다 다음 : 그것은 내가 널 포인터의 오류를 부여하고 도움이 있다면

button.setOnClickListener(new View.OnClickListener() { 
        @Override 
        public void onClick(View view) { 
         ArrayList<String> arrayList = new ArrayList<>(); 
         for (int i = 0; i < lnrDynamicEditTextHolder.getChildCount(); i++) { 
          arrayList.add(((EditText) lnrDynamicEditTextHolder.findViewWithTag(i)).getText().toString()); 
         } 

         Intent intent = new Intent(ChoiceMaker.this, Randomizer.class); 
         intent.putStringArrayListExtra("strings", arrayList); 
         startActivity(intent); 
        } 
       });