Повторяющиеся элементы в ArrayList Android Studio - PullRequest
0 голосов
/ 03 апреля 2020

Я получаю переменную из другого действия

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        // check that it is the SecondActivity with an OK result
        if (requestCode == 0) {
            if (resultCode == RESULT_OK) { // Activity.RESULT_OK

                // get String data from Intent
                String returnString = data.getStringExtra("keyName");
                // Add data to ArrayList
                Array_List.add(1,returnString);
            }
        }
    }

Ожидаемый результат:

Элемент, введенный пользователем

Результат: дублирует последний добавленный элемент в ArrayList


public class MainActivity extends AppCompatActivity {

    public final String FILENAME = "example.txt";
    ArrayList<String> Array_List = new ArrayList<String>();
    Context context = this;



    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        final ListView lv = (ListView) findViewById(R.id.LV_Main);


        Array_List.add(0,"Saved Posts");
        //Ensures Add new is always at the end
        Array_List.add(Array_List.size(), "Add New +");

        final ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(
                this,
                android.R.layout.activity_list_item,android.R.id.text1,
                rray_List );
                lv.setAdapter(arrayAdapter);
                lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {






    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        // check that it is the SecondActivity with an OK result
        if (requestCode == 0) {
            if (resultCode == RESULT_OK) { // Activity.RESULT_OK

                // get String data from Intent
                String returnString = data.getStringExtra("keyName");
                // Add data to ArrayList
                Array_List.add(1,returnString);
            }
        }
    }



    }

Заранее спасибо

Редактировать: Array_List.add(Array_List.size() - 1, "Add New +"); Не работает Кроме того, мне нужно, чтобы Добавить новый всегда был внизу, а Сохраненные сообщения вверху

Странно, как будто я удаляю Array_List.add(1,returnString);, тогда он работает, но добавляет возвращаемую строку в конец ArrayList, однако мне нужно всегда добавлять Add New внизу

Ответы [ 2 ]

0 голосов
/ 03 апреля 2020

Требуемое поведение уже существует в ListView - оно называется «Верхний колонтитул» и «Нижний колонтитул». Вы также можете просто указать один из них в xml, чтобы сделать вашу жизнь проще:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    final ListView lv = (ListView) findViewById(R.id.LV_Main);

    lv.addHeaderView(createTextView("Saved Posts"));
    lv.addFooterView(createTextView("Add New +"));

    //Etc. etc.
}
private TextView createTextView(String content) {
    TextView tv = new TextView(this);
    tv.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT));
    tv.setText(content);
    return tv;
}

Теперь вам не нужно беспокоиться о вставке первого и последнего элементов самостоятельно - просто добавьте контент в свой список и обновите им свой адаптер.

Редактировать: Если вы хотите, чтобы верхний и нижний колонтитулы имели тот же стиль, что и остальные элементы списка:

private View createHeaderOrFooter(String content) {
    final LayoutInflater inflater = LayoutInflater.from(this);
    final View row = inflater.inflate(android.R.layout.activity_list_item, null);
    ((TextView)row.findViewById(android.R.id.text1)).setText(content);
    return row;
}
0 голосов
/ 03 апреля 2020

заменить

Subreddit_Array_List.add(Subreddit_Array_List.size(), "Add New +");

на

Subreddit_Array_List.add(Subreddit_Array_List.size() - 1, "Add New +");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...