Прокрутите представление, чтобы действовать как представление списка, устанавливая текстовое представление из базы данных - PullRequest
1 голос
/ 27 февраля 2012

Я пытаюсь отойти от просмотра списка с одним из моих действий, которые имеют TextView и Edittext рядом друг с другом. Редактирование текста в просмотре списка доставляло мне много хлопот. Я пытаюсь сделать мой вид прокрутки похожим на просмотр списка, но без проблем с утилизацией. Я установил макет, чтобы начать (не на 100%, как я хочу, чтобы он выглядел), но теперь я хочу заполнить мое текстовое представление данными, извлеченными из базы данных, и я бью стену здесь. Вот что у меня пока ...

public class inputpage extends Activity {
    public static int editCount = 10; //needs to be dynamic based on how many items the cursor pulls but using 10 till I have more code in place 
    public LinearLayout editlayout;
    static Map<Integer, String> inputValues = new LinkedHashMap<Integer, String>();
    @Override
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);

    setContentView(R.layout.inputlayout);
    editlayout=(LinearLayout) this.findViewById(R.id.editlayout);

    buildRow();



}

    public void buildRow(){
        LayoutParams textparam = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
        LayoutParams editparam = new LayoutParams(350, LayoutParams.WRAP_CONTENT);
        textparam.setMargins(2, 2, 2, 2);

        for (int i = 0; i < editCount; i++){
            //textview
            TextView tv=new TextView(this);
            tv.setLayoutParams(textparam);
            tv.setText("test");
            tv.setTextSize(35);
            tv.setTextColor(getResources().getColor(R.color.black));
            this.editlayout.addView(tv);
            //edittext
            EditText edit = new EditText(this);
            edit.setLayoutParams(editparam);
            this.editlayout.addView(edit);
            edit.setId(editCount);
            edit.addTextChangedListener(new TextWatcher(){
            public void afterTextChanged(Editable editable) {
                Log.e(String.valueOf(editCount), "Position in array");
                inputValues.put(editCount, editable.toString());
                Log.e(editable.toString(), "added to array");

            }
            public void beforeTextChanged(CharSequence s, int start, int count,
                    int after) {
                // TODO Auto-generated method stub

            }
            public void onTextChanged(CharSequence s, int start, int before,
                    int count) {
                // TODO Auto-generated method stub

            }
        });

        }}
}

Код, который я использовал раньше, это ....

public class editpage extends ListActivity {
    private dbadapter mydbhelper;
    private PopupWindow pw;
    public static SimpleCursorAdapter editadapter;
    public static ArrayList<String> editTextList = new ArrayList<String>();
    private ArrayList<EditText> m_edit = new ArrayList<EditText>();
    public static Map<Integer,String> myList=new LinkedHashMap<Integer,String>();

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.edit_list);
        m_edit.clear();
        mydbhelper = new dbadapter(this);
        mydbhelper.open();
        fillData();

        }

    }
    //size of adapter and arrays
    public static int getCount(){
        return editadapter.getCount();
    }

    public void fillData() {
    Cursor e = mydbhelper.getUserWord();
        startManagingCursor(e);
        String[] from = new String[] {dbadapter.KEY_USERWORD,};
        int[] to = new int[] {R.id.textType,};
       editadapter = new SimpleCursorAdapter(this, R.layout.edit_row, e, from, to);
       ListView list = getListView();
       View footer = getLayoutInflater().inflate(R.layout.footer_layout, list, false);
       list.addFooterView(footer);
       setListAdapter(editadapter);}

                }

Я не смог найти хороших ресурсов о том, как это сделать, поэтому я надеюсь, что кто-то здесь знает ссылку или какой-то фиктивный код, который я мог бы создать.

1 Ответ

0 голосов
/ 27 февраля 2012

Ну, это заняло у меня некоторое время, но я получил его, поэтому подумал, что буду публиковать, если кому-то еще понадобится эта информация, потому что мне понадобилось некоторое время, чтобы выследить подсказки, чтобы добраться в правильном направлении. Обратите внимание, что я изменил на tablelayout, чтобы получить что-то близкое к нужному макету.

public class inputpage extends Activity {

    public TableLayout tl;
    static Map<Integer, String> inputValues = new LinkedHashMap<Integer, String>();
    private dbadapter mydbhelper;
    public static int editCount;
    public Cursor cursor;

    @Override
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    mydbhelper = new dbadapter(this);
    mydbhelper.open();
    setContentView(R.layout.tablelayout);
    tl=(TableLayout) this.findViewById(R.id.table);
    cursor = mydbhelper.getUserWord();
    editCount = cursor.getCount();
    buildRow();






    }
    public void buildRow(){

        LayoutParams textparam = new TableRow.LayoutParams(TableRow.LayoutParams.FILL_PARENT, TableRow.LayoutParams.WRAP_CONTENT);
        LayoutParams editparam = new TableRow.LayoutParams(TableRow.LayoutParams.FILL_PARENT, TableRow.LayoutParams.WRAP_CONTENT);
        textparam.setMargins(2, 2, 2, 2);
        LayoutParams rowparam = new TableRow.LayoutParams(TableRow.LayoutParams.FILL_PARENT, TableRow.LayoutParams.WRAP_CONTENT);
        cursor.moveToFirst();
        for (int i = 0; i < editCount; i++){
            TableRow tr = new TableRow(this);
            tr.setLayoutParams(rowparam); 

            //textview
            TextView tv=new TextView(this);
            tv.setLayoutParams(textparam);
            tv.setText(cursor.getString(cursor.getColumnIndex("userword")));
            tv.setTextSize(35);
            tv.setGravity(Gravity.CENTER);
            tv.setTextColor(getResources().getColor(R.color.black));
            tr.addView(tv);

            //edittext
            EditText edit = new EditText(this);
            edit.setLayoutParams(editparam);
            tr.addView(edit);
            edit.setId(editCount);
            edit.addTextChangedListener(new TextWatcher(){
            public void afterTextChanged(Editable editable) {
                //unfinished and confirmed to work atm
                            Log.e(String.valueOf(editCount), "Position in array");
                inputValues.put(editCount, editable.toString());
                Log.e(editable.toString(), "added to array");


            }
            public void beforeTextChanged(CharSequence s, int start, int count,
                    int after) {
                // TODO Auto-generated method stub

            }
            public void onTextChanged(CharSequence s, int start, int before,
                    int count) {
                // TODO Auto-generated method stub

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

}
...