>
Activity_fruits 에서  "Apple, Pineapple, ... 등과 같은 과일 이름의 스피너가 있습니다. 사용자가 스피너에서 항목 중 하나를 선택하면 일련의 확인란이 생성됩니다.

이 체크 박스는 내 Dishes.java 에서 온 요리의 이름입니다  수업. 스피너에서 사용자가 선택한 모든과일은 어떤 요리가 어떤 과일에 해당하는지에 따라 다른요리확인란을 생성합니다.

내 질문은 :이 생성 된 확인란의 값/텍스트를 다음 활동에 전달하는 방법 Activity_checkout  사용자가 선택/확인했을 때?

아래의 코드가 있지만 체크 박스의 값/텍스트 ( test[0] 에 포함되어 있음)  의도)가 다음 활동으로 이전되지 않습니다.

아래는 나의 견해와 통제 선언입니다 :

공개 클래스 Activity_fruits는 활동을 확장합니다 {

   // Instantiate Fruits class
    private Fruits fruits = new Fruits();
    private Dish dish = new Dish();
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_fruits);
        final String passToNextActivity = getIntent().getStringExtra("selectedDish");
    final String fruitStr = spnFruits.getSelectedItem().toString();
    final LinearLayout ll = (LinearLayout) findViewById(R.id.ll);
    final int count = ll.getChildCount();
    final String[] test = {""};
...

그리고 아래는 프로그래밍 방식으로 요리에 대한 확인란을 생성하는 방법입니다 (Dish.java 클래스에서 가져옴). CheckBox에 대한 XML 레이아웃이 없습니다 :

// Create different dish checkboxes for each food selection in the spinner
        spnFruits.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
            @Override
            public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
                String fruitStr = (String) adapterView.getItemAtPosition(i);
                TextView txtRestaurant = (TextView) findViewById(R.id.txtFruits);
                //This TextView is just to confirm the fruit that the user selected
                txtFruit.setText("You selected the Fruit: " + fruitStr);
                final List<String> listFruits = fruits.getFruits(fruitStr);
                // Clears the layout everytime the user selects another fruit from the spinner
                ll.removeAllViews();
                for (int j = 0; j < listFruits.size(); j++) {
                    final CheckBox cbDishes = new CheckBox(Activity_fruits.this);
                    cbDishes.setText(listFruits.get(j));
                    cbDishes.setTag(listFruits);
                    ll.addView(cbDishes);
                    ////////////
                    cbFruits.setOnClickListener(new View.OnClickListener() {
                            @Override
                            public void onClick(View view) {
                                for (int x = 0; x < count; x++) {
                                    View v = ll.getChildAt(x);
                                    if (v instanceof  CheckBox){
                                        test[0] = ((CheckBox) v).getText().toString(); } //My problem:  This code is not storing any string at all
                                }
                            }
                        });
                    ////////////
                }
            }
        });
        /////////////
        Button btnNextActivity = (Button) findViewById(R.id.btnNextActivity);
        btnNextActivity.setOnClickListener(new View.OnClickListener(){
            @Override
            public void onClick(View view) {
                Intent intent = new Intent(Activity_fruits.this, Activity_checkout.class);
                intent.putExtra("selectedDishes", test[0]); //My Problem:  The test[0] is supposed to contain all user selected check boxes but it doesn't.
                startActivity(intent);
            }
        });
    }
}

그리고 나의 다음 활동 Activity_checkout  입니다 :

public class Activity_checkout extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_checkout);
        final String dishes = getIntent().getStringExtra("selectedDishes");
        TextView txtSelectedDish = (TextView) findViewById(R.id.txtSelectedDish);
        txtSelectedDishs.setText("Your selected dishes are:  " + dishes.toString()); //My Problem:  food.dishes.toString() is not returning a value meaning the checkbox value from Activity_fruits wasn't successfully transferrred over.
    }
}

  • 답변 # 1

    OnClickListener의 for는 ll을 부풀린 직후 초기화되기 때문에 count가 아마도 0이기 때문에 실행되지 않습니다

    count = ll.getChildCount();
    
    

    확인란이 추가되기 전에 클릭 리스너에서 직접ll.getChildCount ()를 사용하거나 카운트를 초기화하고 확인란을 만드는 for 루프 이후에 리스너를 설정해야합니다.

  • 이전 javascript - 부모 DIV에서 클래스별로 DIV 찾기
  • 다음 Rails/PostgreSQL - rails/postgresql - 두 개의 사용자 id 조합이 하나만있을 수있는 위치를 어떻게 확인합니까?