Estou recebendo a variável de uma atividade diferente
@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
Subreddit_Array_List.add(1,returnString);
}
}
}
Resultado esperado:
Item introduzido pelo usuário
Resultado: Duplica o último item adicionado na ArrayList
public class MainActivity extends AppCompatActivity {
public final String FILENAME = "example.txt";
ArrayList<String> Subreddit_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);
Subreddit_Array_List.add(0,"Saved Posts");
//Ensures Add new is always at the end
Subreddit_Array_List.add(Subreddit_Array_List.size(), "Add New +");
final ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(
this,
android.R.layout.activity_list_item,android.R.id.text1,
Subreddit_Array_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
Subreddit_Array_List.add(1,returnString);
}
}
}
}
desde já, obrigado
Edit: Subreddit_Array_List.add(Subreddit_Array_List.size() - 1, "Add New +");
não funciona Além disso, eu preciso adicionar novo para estar sempre na parte inferior e mensagens guardadas no topo
É estranho como se eu remover o Subreddit_Array_List.add(1,returnString);
Então ele funciona, mas adiciona o returnstring para o fundo do ArrayList, no entanto eu preciso do Add New sempre na parte inferior
O comportamento que você está procurando já existe no ListView
- é chamado de "cabeçalho" e um "rodapé". Você também pode apenas definir um em xml para tornar sua vida mais fácil:
@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;
}
Agora você não precisa se preocupar sobre como inserir os primeiros e últimos elementos a si mesmo - basta adicionar o conteúdo à sua lista e atualizar o seu adaptador com ele.
Edit: Se você deseja que o cabeçalho e rodapé de ter o mesmo estilo como o resto da sua lista elementos:
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;
}