2016-10-16 3 views
0

У меня есть два действия (A и B), активность A запрашивает ввод текста (строка), а активность B хранит эту строку в таблице. То, что я хочу достичь: каждый раз, когда я добавляю новую строку в таблицу, предыдущая строка перемещается вниз по одной строке, а новая строка занимает старую строку. Я также хочу сохранить макет таблицы в действии B каждый раз, когда я вернусь к действию A. Как я могу это сделать?Позиционирование данных в TableLayout - Android Studio

+1

Как насчет RecyclerView, который вставлен в начале адаптера? У вас есть динамические данные, поэтому лучше всего использовать адаптер –

+0

Спасибо за ваш ответ @ cricket_007. Я не слишком уверен, что вы подразумеваете под этим? – Erz

+0

К сожалению, я не могу найти RecyclerView, о котором вы говорите в Android Studio. У вас будет пример кода такого процесса? @ cricket_007 – Erz

ответ

0

Обновлено - Входной активность

public class MainActivity extends AppCompatActivity { 

    public static String PREFS_NAME = "prefs"; 
    public static String VALUES_KEY = "vals"; 

    EditText editText; 
    SharedPreferences prefs; 

    @Override 
    protected void onStart() { 
     super.onStart(); 
     prefs = getSharedPreferences(PREFS_NAME, MODE_PRIVATE); 
    } 

    private void addValue(Object s) { 
     prefs.edit() 
       .putString(VALUES_KEY, String.valueOf(s)) 
       .apply(); 
    } 

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

     editText = (EditText) findViewById(R.id.editText); 

     findViewById(R.id.button).setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       String s = editText.getText().toString(); 
       JSONArray arr = new JSONArray(); 

       // Just for testing 
       if (s.equals("clear")) { 
        addValue(arr); 
        Toast.makeText(MainActivity.this, "prefs cleared", Toast.LENGTH_SHORT).show(); 
        return; 
       } 
       String jsonString = prefs.getString(VALUES_KEY, arr.toString()); 

       // Store a JSON array 
       try { 
        arr = new JSONArray(jsonString); 
        arr.put(s); 
        addValue(arr); 
       } catch (JSONException e) { 
        e.printStackTrace(); 
       } 

       // Go to next activity 
       startActivity(new Intent(MainActivity.this, TableLayoutActivity.class)); 

      } 
     }); 
    } 
} 

Второй вид деятельности - Имеет таблицу

public class TableLayoutActivity extends AppCompatActivity { 

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

     SharedPreferences prefs = getSharedPreferences(MainActivity.PREFS_NAME, MODE_PRIVATE); 

     TableLayout tl = (TableLayout) findViewById(R.id.table); 

     // Get the array out of preferences 
     JSONArray arr = new JSONArray(); 
     String jsonString = prefs.getString(MainActivity.VALUES_KEY, arr.toString()); 

     LayoutInflater inflater = LayoutInflater.from(this); 
     try { 
      arr = new JSONArray(jsonString); 
      // Loop backwards over list, adding rows 
      for (int i = arr.length() - 1; i >= 0; --i) { 
       View rowView = inflater.inflate(R.layout.table_row, tl, false); 
       TextView rowText = (TextView) rowView.findViewById(android.R.id.text1); 

       rowText.setText(i + ": " + arr.getString(i)); 
       tl.addView(rowView, 
         TableLayout.LayoutParams.MATCH_PARENT, 
         TableLayout.LayoutParams.WRAP_CONTENT); 
      } 

     } catch (JSONException e) { 
      e.printStackTrace(); 
     } 
    } 
} 

Оригинал ответа

каждый раз, когда я добавить новую строку в таблице, предыдущая строка перемещается вниз по одной строке, а новая строка занимает старую строку

Я не вижу TableLayout или TableRow в вашем вопросе. Есть три постоянные строки, но порядок, который вы хотите отобразить, кажется неясным.

Но вот подход ... Вы сохраняете список строк в SharedPreferences или базе данных, что угодно. Вы передаете этот список строк в Activity с помощью TableLayout tl = (TableLayout) findViewById(R.id.tableLayout).

Оттуда вы можете просто петля назад for (int i = list.size(); i >=0; i--), получить String s = list.get(i);, а затем генерировать TableRow tr = new TableRow() который вы добавите некоторые TextView что вы имеете setText(s) на нем. (Или inflate некоторый XML-файл, содержащий как TextView, так и TableRow).

Когда вы закончите строительство TableRow tr, то вы можете

tl.addView(tr, new TableLayout.LayoutParams(
    TableLayout.LayoutParams.FILL_PARENT, 
    TableLayout.LayoutParams.WRAP_CONTENT)); 

Таким образом, делая то, что я процитировал выше.

+0

Спасибо за ваш ответ и совет, я попробую его и посмотрю, как я пойду. TableLayout и EditText внутри каждого TableRow были созданы в XML-файле. У них есть идентификатор: диагноз1, диагноз2 и диагноз3, но теперь я понимаю, что это неправильный путь. – Erz

+0

Не могли бы вы также показать мне, как правильно хранить список строк в SharedPreferences? Метод, который я использовал в моем коде, к сожалению, не работает. – Erz

+0

Я бы, вероятно, использовал представление JSON. http://stackoverflow.com/a/27872280/2308683 Другие решения находятся в этом сообщении, хотя –

 Смежные вопросы

  • Нет связанных вопросов^_^