0

私はmysqlデータベースからメニュー名を取得し、ベースアダプターを使用してカスタムリストビューのedittextに追加しています.今、editext値のいくつかのメニュー名を変更しています. 今、最初から最後まですべての編集テキストを取得したい

            Eg:x,y,z,.... are menunames coming from database it append editext(cusom listview)
            i am change editext value y to b
            now i want x,b,z...... values in arraylisst..

私の基本アダプタークラス

public class EditMainMenulistview extends BaseAdapter {
    public final ArrayList<String> arr = new ArrayList<String>();
    protected static Context Context = null;
    int i;
    public String editnewmainmenu, menuname, edittext;
    String qrimage;
    Bitmap bmp, resizedbitmap;
    Bitmap[] bmps;
    Activity activity = null;
    private LayoutInflater inflater;

    private ImageView[] mImages;
    String[] itemimage;
    TextView[] tv;
    String itemname, itemcode;
    public String[] itemnames, itemcodes;
    HashMap<String, String> map = new HashMap<String, String>();

    public EditMainMenulistview(Context context, JSONArray imageArrayJson) {
        Context = context;
        // inflater =
        // (LayoutInflater)activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        // imageLoader=new ImageLoader(activity);
        inflater = LayoutInflater.from(context);
        this.mImages = new ImageView[imageArrayJson.length()];
        this.bmps = new Bitmap[imageArrayJson.length()];
        this.itemnames = new String[imageArrayJson.length()];
        this.itemcodes = new String[imageArrayJson.length()];

        try {

            for (i = 0; i < imageArrayJson.length(); i++) {
                JSONObject image = imageArrayJson.getJSONObject(i);
                qrimage = image.getString("menuimage");
                itemname = image.getString("menuname");
                itemcode = image.getString("menucode");
                itemnames[i] = itemname;
                itemcodes[i] = itemcode;

                byte[] qrimageBytes = Base64.decode(qrimage.getBytes());

                bmp = BitmapFactory.decodeByteArray(qrimageBytes, 0,
                        qrimageBytes.length);
                int width = 100;
                int height = 100;
                resizedbitmap = Bitmap.createScaledBitmap(bmp, width, height,
                        true);
                bmps[i] = bmp;

                mImages[i] = new ImageView(context);
                mImages[i].setImageBitmap(resizedbitmap);

                mImages[i].setScaleType(ImageView.ScaleType.FIT_START);

                // tv[i].setText(itemname);
            }
            System.out.println(itemnames[i]);

        } catch (Exception e) {
            // TODO: handle exception
        }
    }

    public int getCount() {
        return mImages.length;
    }

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

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

    public View getView(int position, View convertView, ViewGroup parent) {
        final ViewHolder holder;

        if (convertView == null) {
            holder = new ViewHolder();
            convertView = inflater.inflate(R.layout.editmainmenulist, null);
            holder.caption = (EditText) convertView
                    .findViewById(R.id.editmaimenu);
            holder.caption1 = (ImageView) convertView
                    .findViewById(R.id.menuimage);
            convertView.setTag(holder);
        } else {
            holder = (ViewHolder) convertView.getTag();
        }
        // Fill EditText with the value you have in data source
        holder.caption.setText(itemnames[position]);//i append menunames here
        holder.caption.setId(position);
        holder.caption1.setImageBitmap(bmps[position]);

        // we need to update adapter once we finish with editing
        arr.add(holder.caption.getText().toString());//here i am try to get all values change and without edit text values but it get only menunames values

        return convertView;
    }
}

class ViewHolder {
    EditText caption;
    ImageView caption1;
}

class ListItem {
    String caption;
}

私を助けてください

4

1 に答える 1

0

Id を取得するOnTouchには forを使用し、その EditText で Editext を取得するには追加する必要があると思います。EditTextTextWatcher

EditText の Touch Listener の例を次に示します。

OnTouchListener mEdittextTouchListener = new OnTouchListener() {

    @Override
    public boolean onTouch(View v, MotionEvent event) {

        int childPosition =  v.getId;
        Log.i("Log_tag", "Edittext Position is " + childPosition);
                   //Here you will get your EditText Position.
        //saveData=true;
        //setChildPosition(childPosition);

        return false;
    }
};

アクティビティに実装TextWatcherし、このような変更を の getView に追加しますBaseAdapter

 holder.caption.removeTextChangedListener(ExpandableListPage.this);
 holder.caption.setOnTouchListener(mEdittextTouchListener);
 holder.caption.addTextChangedListener(ExpandableListPage.this);

最初に EditText から TextWatcher を削除して追加してください。リストビュー ビューが表示されると、EditText が TextWather メソッドを呼び出すため、これを防ぐには、常に削除してから追加する必要があります。

    @Override
public void afterTextChanged(Editable s) {
    Log.v("Log_tag", "After TextChanged" + s.toString());


}

@Override
public void beforeTextChanged(CharSequence s, int start, int count,
        int after) {
    Log.i("Log_tag", "Before TextChanged" + s.toString());

}

@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
    Log.e("Log_tag", "ontext Changed"+ s.toString());
    if(count!=0){
        if(saveData){
            //Add your EditText Change Value here 
                           arr.add(s.toString());
            }
        }

    }


}
于 2012-04-10T07:15:01.880 に答える