Добавить элементы в ListView, который находится в другой деятельности (только 1 запись) - PullRequest
4 голосов
/ 10 марта 2019

Я пытаюсь создать приложение, в котором я хочу передать значение из editText(MainActivity.java) в listView(bestFitActivity.java), которое помещается в другое действие.Проблема с моим кодом в том, что он передает только одно значение в listView.Когда я ввожу новое значение, оно просто заменяет предыдущее значение.

MainActivity.java

public class MainActivity extends AppCompatActivity {
    int i = 0;
    String getChunkSize;
    ArrayList<String> chunkSizeArray = new ArrayList<>();
    EditText chunkSize;

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

        Button chunkSave = (Button)findViewById(R.id.chunkSave);
        Button processSave = (Button)findViewById(R.id.processSave);
        Button bestFitDirector = (Button)findViewById(R.id.bestFitdirector);
        Button worstFitDirector = (Button)findViewById(R.id.worstFitdirector);
        Button firstFitDirector = (Button)findViewById(R.id.firstFitDirector);

        EditText processSize = (EditText)findViewById(R.id.processSize);
        chunkSize = (EditText)findViewById(R.id.chunkSize);

        chunkSave.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {

                i++;
                Log.d("Manager" , "%d" +i);


                getChunkSize = chunkSize.getText().toString();
                //Log.d("Manager" , "" +getChunkSize);


                if(getChunkSize == null ) {
                    Toast.makeText(getBaseContext(), "Empty Input", Toast.LENGTH_SHORT).show();
                }
            }
        });

        bestFitDirector.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent myIntent =  new Intent(MainActivity.this , bestFitActivity.class);
                myIntent.putExtra("chunkSizeArray" , getChunkSize );
                startActivity(myIntent);
            }
        });

        /*worstFitDirector.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent myIntent2 = new Intent (MainActivity.this , worstFitActivity.class);
                startActivity(myIntent2);
            }
        });

        firstFitDirector.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent myIntent3 = new Intent (MainActivity.this , firstFitActivity.class);
                startActivity(myIntent3);
            }

        });*/
    }
}

bestFitActivity.java

public class bestFitActivity extends AppCompatActivity {
    String chunkSIZE;
    ArrayList<String> chunkSizeArray = new ArrayList<>();


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

        ListView blockSize = (ListView)findViewById(R.id.blockSize);
        ListView finalProcessList  = (ListView)findViewById(R.id.finalprocesslist);

        chunkSIZE = getIntent().getExtras().getString("chunkSizeArray");
        Log.d("Manager" , " "+chunkSIZE);

        chunkSizeArray.add(chunkSIZE);
        Log.d("Manager" , ""+chunkSIZE);

        ArrayAdapter<String> adapter = new ArrayAdapter<>(bestFitActivity.this , android.R.layout.simple_expandable_list_item_1 , chunkSizeArray);
        blockSize.setAdapter(adapter);
        adapter.notifyDataSetChanged();
        //((EditText)findViewById(R.id.chunkSize)).setText(" ");
        //EditText tv = (EditText) findviewbyID(R.id.)
    }
}

PS: этот код не является полным

Ответы [ 2 ]

5 голосов
/ 10 марта 2019

Каждый раз, когда вы нажимаете кнопку, создается новое действие с новым пустым списком chunkSize ArrayList только с одним значением.

Вы можете при каждом нажатии кнопки добавлять chunkSizeArray в MainActivity, а затем отправлять счетчик и значения массива в отдельных intentExtras.

А затем получить и собрать ArrayList из всех дополнительных функций в bestFitActivity.

Вот как ты мог это сделать

public class MainActivity extends AppCompatActivity {

    public static final String INTENTKEY_ARRAYELEMENTS = "arrayelemets";
    public static final String INTENYKEY_ELEMENTX = "element_";
    private static ArrayList<String> chunkSizeArray = new ArrayList<>();
    Button bestFitDirector;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        bestFitDirector = (Button)findViewById(R.id.bestFitdirector);

        bestFitDirector.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                chunkSizeArray.add("Test" + String.valueOf(chunkSizeArray.size() + 1));
                Intent myitent = new Intent(MainActivity.this,bestFitActivity.class);
                myitent.putExtra(INTENTKEY_ARRAYELEMENTS, chunkSizeArray.size());
                for (int i=0; i < chunkSizeArray.size(); i++) {
                    myitent.putExtra(INTENYKEY_ELEMENTX + String.valueOf(i),chunkSizeArray.get(i));
                }
                startActivity(myitent);
            }
        });
    }
}

и

public class bestFitActivity extends AppCompatActivity {

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

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

        Intent mypassedIntent = getIntent();

        int elements = mypassedIntent.getIntExtra(MainActivity.INTENTKEY_ARRAYELEMENTS,0);
        for (int i = 0; i < elements; i++) {
            chunkSizeArray.add(mypassedIntent.getStringExtra(MainActivity.INTENYKEY_ELEMENTX + String.valueOf(i)));
        }
        Toast.makeText(this,"The number of strings in the chukSizeArray is " + String.valueOf(chunkSizeArray.size()),Toast.LENGTH_SHORT).show();
        for (String s: chunkSizeArray) {
            Log.d("chunkSizeArray Value",s);
        }
    }
}

После нажатия 5 раз (нажмите «Назад», чтобы вернуться в MainActivity), журнал равен

2019-03-10 17:19:51.687 11271-11271/com.example.bestfitapp D/chunkSizeArray Value: Test1

2019-03-10 17:19:56.362 11271-11271/com.example.bestfitapp D/chunkSizeArray Value: Test1
2019-03-10 17:19:56.362 11271-11271/com.example.bestfitapp D/chunkSizeArray Value: Test2

2019-03-10 17:19:59.877 11271-11271/com.example.bestfitapp D/chunkSizeArray Value: Test1
2019-03-10 17:19:59.877 11271-11271/com.example.bestfitapp D/chunkSizeArray Value: Test2
2019-03-10 17:19:59.877 11271-11271/com.example.bestfitapp D/chunkSizeArray Value: Test3

2019-03-10 17:20:03.007 11271-11271/com.example.bestfitapp D/chunkSizeArray Value: Test1
2019-03-10 17:20:03.007 11271-11271/com.example.bestfitapp D/chunkSizeArray Value: Test2
2019-03-10 17:20:03.007 11271-11271/com.example.bestfitapp D/chunkSizeArray Value: Test3
2019-03-10 17:20:03.007 11271-11271/com.example.bestfitapp D/chunkSizeArray Value: Test4

2019-03-10 17:20:06.266 11271-11271/com.example.bestfitapp D/chunkSizeArray Value: Test1
2019-03-10 17:20:06.266 11271-11271/com.example.bestfitapp D/chunkSizeArray Value: Test2
2019-03-10 17:20:06.266 11271-11271/com.example.bestfitapp D/chunkSizeArray Value: Test3
2019-03-10 17:20:06.266 11271-11271/com.example.bestfitapp D/chunkSizeArray Value: Test4
2019-03-10 17:20:06.266 11271-11271/com.example.bestfitapp D/chunkSizeArray Value: Test5

добавлены пробелы для разделения кликов вверх

Более простой способ - использовать putStringArrayListExtra вместе с getStringArrayListExtra , который в основном выполняет циклы от вашего имени.

То есть с основным видом деятельности, имеющим

 public static final String INTENTKEY_ARRAY = "bestfitarray";

В слушателе onClick вы можете иметь: -

myitent.putStringArrayListExtra(INTENTKEY_ARRAY,chunkSizeArray);

вместе с

myitent.putStringArrayListExtra(INTENTKEY_ARRAY,chunkSizeArray);

в bestFitActivity.

1 голос
/ 10 марта 2019

Есть простой взлом, который вы можете сделать

изменить ArrayList<String> chunkSizeArray = new ArrayList<>();

до статического типа private static ArrayList<String> chunkSizeArray = new ArrayList<>();

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...