Search code examples
androidlistviewodoodynamic-programmingodoo-mobile

listview malfunctioning with v1 of Mobile framework odoo for Android


In the list view there is textview, button and edittext in the single list item. And all the items are getting generated dynamically sometimes 3 sometimes 7 sometimes 14 ...

If I put values in those edittext ... I am able to et values of 6 or less edittext ... In the device Genymotion with 4.7" with visible item on screen are 6 and 7th partial... While in the 10" genymotin, the visible items are 9

How to get values from the all the edittext from this dynamic listview?

.....

public class DeliveryDetailFinal extends BaseFragment {

    Integer mPickingId = null;
    Integer mLineSize = null;
    LinkedHashMap<String, String> productData = new LinkedHashMap<String, String>();
    List<Object> moveLinesfinalData;
    View mDOViewFinal = null;
    ListView mMoveLinesFinalListDo = null;
    Context mDBContextDDF = null;
    List<OEDataRow> moveLinesData;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        setHasOptionsMenu(true);
        mDOViewFinal = inflater.inflate(R.layout.fragment_delivery_order_detail_final_view,
                container, false);
        Bundle bundle = getArguments();
        if (bundle != null) {
            mLineSize = bundle.getInt("lineSize");
        }
        init();
        mDODHelper = db().getOEInstance();
        mDBContextDDF = (Context) getActivity();
        return mDOViewFinal;
    }

    private void init(){
            initControls();
    }

    private void initControls(){
        moveLinesData = mDeliveryOrderData.getO2MRecord("move_lines").browseEach();
        mMoveLinesFinalListDo = (ListView) mDOViewFinal.findViewById(R.id.DOMoveLinesFinal);
        moveLinesfinalData = new ArrayList<Object>();
        moveLinesfinalData.addAll(moveLinesData);
        OEListAdapter listAdapter = new OEListAdapter(mDBContextDDF, R.layout.fragment_final_details_view, moveLinesfinalData){
            @Override
              public View getView(int position, View convertView, ViewGroup parent) {
                  View mView = convertView;
                  if (mView == null)
                      mView = getActivity().getLayoutInflater().inflate(
                              getResource(), parent, false);
                  mView = createListViewRow(mView, position, moveLinesfinalData); 
                  mView.setVisibility(1);
                  return mView;
              }
        };
        mMoveLinesAdapterfinal = listAdapter;
        Log.d("final", "final  mMoveLinesAdapterfinal "+mMoveLinesAdapterfinal);
        mMoveLinesFinalListDo.setAdapter(mMoveLinesAdapterfinal);
    }

    public View createListViewRow(View mView, int position,
            List<Object> moveLinesObjectData) {
            final OEDataRow row = (OEDataRow) moveLinesObjectData.get(position);
        TextView eProductName = (TextView) mView.findViewById(R.id.textViewProductNameFinal);
        eProductName.setText(row.getString("name").toString());
        LinearLayout innerLinearLayout = (LinearLayout) mView.findViewById(R.id.innerLinearLayout);
        EditText editTextProductId = (EditText) innerLinearLayout.findViewById(R.id.editTextProductId);
        if(row != null)
            editTextProductId.setText(row.getInt("id").toString());

        EditText eProductSerial = (EditText) innerLinearLayout.findViewById(R.id.editTextProductSerialFinal);

        String id = editTextProductId.getText().toString();
        String serialNumber = ((EditText) eProductSerial).getText().toString();
        productData.put(id,serialNumber);

        Log.d("final", "final productData before "+productData);
        eProductSerial.setOnFocusChangeListener(new View.OnFocusChangeListener() {
            public void onFocusChange(View v, boolean hasFocus) {
               if (!hasFocus)
                {
                    LinearLayout parentLayout = (LinearLayout) v.getParent();
                    if(parentLayout != null) {
                        EditText editTextProductIdFocus = (EditText) parentLayout.findViewById(R.id.editTextProductId);
                        String id = editTextProductIdFocus.getText().toString();
                        String serialNumber = ((EditText) v).getText().toString();
                        productData.put(id,serialNumber);
                    }
                }
            }
        });
            final Button BarCode = (Button) innerLinearLayout.findViewById(R.id.buttonBarcode);
            BarCode.setOnClickListener(new OnClickListener() {
                @Override
                public void onClick(View v) {
                    v.getId();
                }
            });
        return mView;
    }

    @Override
    public Object databaseHelper(Context context) {
        return new StockPickingDB(context);
    }

}

.....

.....

fragment_delivery_order_detail_final_view.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_marginTop="55dp"
    android:orientation="vertical" >

    <ListView
        android:id="@+id/DOMoveLinesFinal"
        android:layout_width="match_parent"
        android:layout_height="match_parent" >
    </ListView>
</LinearLayout>

fragment_final_details_view.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/topLayoutID"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_margin="3dp"
    android:orientation="vertical"
    android:padding="2dp"
    android:visibility="visible" >

            <TextView
                android:id="@+id/textViewProductNameFinal"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_marginEnd="3dp"
                android:layout_marginRight="3dp"
                android:layout_marginLeft="3dp"
                android:layout_marginStart="3dp"
                android:text="@string/product"
                android:textAppearance="?android:attr/textAppearanceSmall"
                android:visibility="visible">
                <requestFocus />
            </TextView>

        <LinearLayout
            android:id="@+id/innerLinearLayout"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:padding="1dp"
            android:layout_margin="1dp"
            android:orientation="horizontal"
            android:visibility="visible">

            <Button
                android:id="@+id/buttonBarcode"
                style="?android:attr/buttonStyleSmall"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:background="@drawable/barcode"
                android:visibility="visible" />

            <EditText
                    android:id="@+id/editTextProductId"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:hint="@string/serial_no"
                    android:visibility="gone">
            </EditText>

            <EditText
                android:id="@+id/editTextProductSerialFinal"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:hint="@string/serial_no"
                android:visibility="visible">
            </EditText>
    </LinearLayout>
</LinearLayout>

please help me ... Thanks in advance ...


Solution

  • I have resolved the issue by using the viewholder concept.