2016-10-16 41 views
0

我有兩個活動(A和B),活性的要求提供一個文本輸入(字符串)和活性B存儲該字符串在表中。我希望實現的目標:每次向表中添加一個新字符串時,前一個字符串向下移動一行,新字符串將取代舊字符串的位置。我也希望在每次返回活動A時將活動B中的表格佈局保存起來。如何實現這一目標?數據定位 - Android Studio中

+1

怎麼樣在插入適配器的開始RecyclerView?你有動態數據,所以最好使用適配器 –

+0

感謝您的回覆@ cricket_007。我不太確定你的意思? – Erz

+0

不幸的是,我無法在Android Studio中找到您所說的RecyclerView。你會碰巧有這樣一個過程的示例代碼? @ 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或數據庫,等等。您將該字符串列表傳遞給TableLayout tl = (TableLayout) findViewById(R.id.tableLayout)的活動。

從那裏,你可以簡單地循環向後for (int i = list.size(); i >=0; i--),得到String s = list.get(i);,然後生成一個TableRow tr = new TableRow(),你會增加一些,你就可以一直setText(s)TextView。 (或者inflate一些包含TextViewTableRow的XML文件)。

當您完成建設TableRow tr,那麼你就可以

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

因此,做什麼我上面引述。

+0

感謝您的回覆和建議,我會嘗試一下並瞭解我的行程。 每個TableRow中的TableLayout和EditText都是在XML文件中創建的。他們有ID:diagnosis1,diagnosis2和diagnosis3,但我現在意識到這是錯誤的方法。 – Erz

+0

您是否還在意向我展示如何在SharedPreferences中正確存儲字符串列表?我的代碼中使用的方法不幸似乎不起作用。 – Erz

+0

我可能會使用JSON表示。 http://stackoverflow.com/a/27872280/2308683其他解決方案在那篇文章中,雖然 –