0

したがって、基本的にこの時点でプログラムに必要なのは、送信ボタンをクリックしたときに、ListViewの動的な各行をループし、EditTextビューの値を取得して、それを配列に挿入する必要があるということです。後でさらに計算を行います。これが今の私のコードです。

package com.hello_world;

import java.util.ArrayList;

import com.hello_world.ByteInputActivity.MyAdapter.ViewHolder;

import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.util.Log;
import android.view.KeyEvent;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnFocusChangeListener;
import android.view.View.OnKeyListener;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.TextView;

public class ByteInputActivity extends Activity {

private ListView myList;
private MyAdapter myAdapter;
private Integer resQuestions;
private Integer indexVal = 0;
private View caption;
ViewHolder holder;
ArrayList<Integer> intArrayList = new ArrayList<Integer>();

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

    //Gets number of questions from MainActivity
    Bundle extras = getIntent().getExtras();
    if(extras !=null) {
        resQuestions = extras.getInt("index");
    }

    myList = (ListView) findViewById(R.id.FieldList);
    myList.setItemsCanFocus(true);
    myAdapter = new MyAdapter();
    myList.setAdapter(myAdapter);

    Button submit = (Button) findViewById(R.id.btn_New);
    submit.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            for (int i = 0; i < myList.getCount() ; i++) {
                View vListSortOrder;
                vListSortOrder = myList.getChildAt(i);     
                String temp = holder.caption.getText().toString();
                    Log.e("VALUES", "" +temp);
            }
        }
    });
}

public class MyAdapter extends BaseAdapter {
    private LayoutInflater mInflater;
    public ArrayList myItems = new ArrayList();

    public MyAdapter() {
        mInflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        for (int i = 0; i < resQuestions; i++) {
            ListItem listItem = new ListItem();
            listItem.caption = "Index " + i;
            listItem.indexText = "Index " + i;
            myItems.add(listItem);
            indexVal += 1;
        }       
        notifyDataSetChanged();
    }

    public int getCount() {
        return myItems.size();
    }

    public Object getItem(int position) {
        return position;
    }

    public long getItemId(int position) {
        return position;
    }

    public View getView(int position, View convertView, ViewGroup parent) {
        if (convertView == null) {
            holder = new ViewHolder();
            convertView = mInflater.inflate(R.layout.item, null);
            holder.indexText = (TextView) convertView .findViewById(R.id.textView1);
            holder.caption = (EditText) convertView .findViewById(R.id.ItemCaption);
            convertView.setTag(holder);
        } else {
            holder = (ViewHolder) convertView.getTag();
        }

        //Fill EditText with the value you have in data source
        holder.caption.setText("");
        holder.caption.setId(position);

        holder.indexText.setText("Index " + position);
        holder.indexText.setId(position);

        //we need to update adapter once we finish with editing
        holder.caption.setOnFocusChangeListener(new OnFocusChangeListener() {
            public void onFocusChange(View v, boolean hasFocus) {
                if (!hasFocus){
                    final int position = v.getId();
                    final EditText Caption = (EditText) v;
                    myItems.set(position, Caption.getText().toString());                    
                }
            }
        });

        return convertView;
    }

class ViewHolder {
    EditText caption;
    TextView indexText;
}

class ListItem {
    String caption;
    String indexText;
}
}
}
4

2 に答える 2

1

これは私がすることです:

これを変更することから始めます:

public ArrayList myItems = new ArrayList();

これに:

public HashMap<Integer, String> myItems = new HashMap<Integer, String>();

次に、getView()を変更します。

public View getView(final int position, View convertView, ViewGroup parent) {
    if (convertView == null) {
        holder = new ViewHolder();
        convertView = mInflater.inflate(R.layout.item, null);
        holder.indexText = (TextView) convertView .findViewById(R.id.textView1);
        holder.caption = (EditText) convertView .findViewById(R.id.ItemCaption);
        convertView.setTag(holder);
    } else {
        holder = (ViewHolder) convertView.getTag();
    }

    //Fill EditText with the value you have in data source
    holder.caption.setText(myItems.get(postition));

    holder.indexText.setText("Index " + position);

    //we need to update adapter once we finish with editing
    holder.caption.setOnFocusChangeListener(new OnFocusChangeListener() {
        public void onFocusChange(View v, boolean hasFocus) {
            if (!hasFocus){
                final EditText Caption = (EditText) v;
                myItems.put(position, Caption.getText().toString());                    
            }
        }
    });

    return convertView;
}

getItem(int position)を変更します:

public Object getItem(int position) {
    return myItems.get(position);
}

テスト解析には、次のようなものを使用できます。

    @Override
    public void onClick(View v) {
        for (int i = 0; i < myList.getCount() ; i++) {
            String item = (Strng) myAdapter.getItem(position); 
                Log.e("VALUES", "" +item);
        }
    }

コードはまだテストしていません。コードがどのように機能するかを教えてください。必要に応じて修正できます。

于 2012-09-20T03:35:40.273 に答える
1

まず、これがどのように機能するかわかりません。

//we need to update adapter once we finish with editing
    holder.caption.setOnFocusChangeListener(new OnFocusChangeListener() {
        public void onFocusChange(View v, boolean hasFocus) {
            if (!hasFocus){
                final int position = v.getId();
                final EditText Caption = (EditText) v;
                myItems.set(position, Caption.getText().toString());                    
            }
        }
    });

ListItemオブジェクトのArrayListを作成しようとしている場合は、次のようにする必要があります。

//we need to update adapter once we finish with editing
    holder.caption.setOnFocusChangeListener(new OnFocusChangeListener() {
        public void onFocusChange(View v, boolean hasFocus) {
            if (!hasFocus){

                //final int position = v.getId();
                //final EditText Caption = (EditText) v;

                ListItem litem = new ListItem();
                litem.caption = holder.caption.getText().toString();
                myItems.set(position, litem);                    
            }
        }
    });

次に、送信ボタンのOnClickListenerから、次の操作を実行できます。

    submit.setOnClickListener(new OnClickListener()
    {
        public void onClick(View v)
        {
            ViewHolder holder;

            for(int i = 0; i < myList.getAdapter().getCount(); i++)
            {
                holder = (ViewHolder) myList.getAdapter().getItem(i);

                String temp = holder.caption.getText().toString();

                Log.e("VALUES", "" + temp);
            }
        }
    });
于 2012-09-20T03:55:49.493 に答える