Ниже представлен мой java-класс

Значение строки s поступает из буфера базы данных, Я хочу, чтобы всякий раз, когда приходит значение i, оно сохранялось в listview как первый кликабельный элемент. Но происходит так, что все значения сохраняются в первой позиции списка как элемент 1

             import android.database.Cursor;
             import android.os.Bundle;
              import android.support.v7.app.AppCompatActivity;
              import android.widget.ArrayAdapter;
              import android.widget.ListView;
              import android.widget.TextView;

              import java.util.ArrayList;
               import java.util.Arrays;


      public class HistoryActivity extends AppCompatActivity {

 ListView lv;
String s= null;
TextView tv1;
DatabaseHelper mydb;
StringBuffer buffer;
private ArrayAdapter listAdapter;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.acticity_history);
    lv = (ListView) findViewById(R.id.listView);
    mydb = new DatabaseHelper(this);

    Cursor res = mydb.getAllData();
    if(res.getCount() == 0)
    {
        return;

    }

    buffer = new StringBuffer();
    while(res.moveToNext()){
        buffer.append(""+ res.getString(1)+ "\n");
    }
    s = buffer.toString();

    String[] values = new String[]{s};


    ArrayList planetList = new ArrayList();
    planetList.addAll( Arrays.asList(values) );

    listAdapter = new ArrayAdapter(this, R.layout.simpleraw, planetList);

    lv.setAdapter(listAdapter);} }     

Ниже представлен мой xml-макет для listview

    

    



ниже приведен мой файл макета simpleraw для textview

      



Ответы (2)

Все ваши значения добавляются к String s. Замените ваш код на следующий,

 @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.acticity_history);
lv = (ListView) findViewById(R.id.listView);
mydb = new DatabaseHelper(this);

Cursor res = mydb.getAllData();
if(res.getCount() == 0)
{
    return;
}

else
{
  ArrayList planetList = new ArrayList();
  while(res.moveToNext()){
    planetList.add(res.getString(1));
    }

    listAdapter = new ArrayAdapter(this, R.layout.simpleraw, planetList);

   lv.setAdapter(listAdapter);
  }
 } 
} 

Установите OnItemClickListener для вашего listView,

.
lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView parent, View view, int position, long id)
        {
            String itemName = (String) lv.getItemAtPosition(position);
            Intent intent = new Intent(currentActivity.this,newActivity.class);
            intent.putExtra("some_string", itemName);
            startActivity(intent);
        }               
  }

Вы добавляли строку для базы данных в буфер строк и Следующий код не даст вам всех элементов в массиве. В массиве будет только один элемент.

String[] values = new String[]{s};

Пожалуйста, используйте следующий код.

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.acticity_history);
        lv = (ListView) findViewById(R.id.listView);
        mydb = new DatabaseHelper(this);

        Cursor res = mydb.getAllData();
        if(res.getCount() == 0)
        {
            return;

        }

        ArrayList planetList = new ArrayList();
        while(res.moveToNext()){
            planetList.add( res.getString(1));
        }

        listAdapter = new ArrayAdapter(this, R.layout.simpleraw, planetList);

   }

2022 WebDevInsider