2017-01-23 5 views
-1

Я разрабатываю приложение с swipe fragment, и моя проблема в том, что клиент хочет, чтобы, если они прокручивают представление, данные внутри него будут автоматически сохранены из таблицы sqlite, например, в представлении есть a EditText внутри него после ввода значения в EditText, значение будет сохранено в sqlite table, когда они пронесутсь к другому виду или к следующему элементу. ПОЖАЛУЙСТА ПОМОГИТЕ МНЕВставить в таблицу sqlite на фрагмент прокрутки

//PagerFragment.java класс, где я называю для ViewPager из XML

public class PagerFragment extends Fragment { 

    private List<PageData> data; 
    private int currentPosition; 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 

     View v = inflater.inflate(R.layout.fragment_pager, container, false); 
     ViewPager mViewPager = (ViewPager) v.findViewById(R.id.pager_view); 

     currentPosition = getArguments().getInt("CURRENT_POSITION"); 
     data = getArguments().getParcelableArrayList("DATA_LIST"); 

     FragmentItemPagerAdapter fragmentItemPagerAdapter = new FragmentItemPagerAdapter(getFragmentManager(), data); 
     mViewPager.setAdapter(fragmentItemPagerAdapter); 
     mViewPager.setCurrentItem(currentPosition); 
     return v; 


    } 

//ListviewAdapter.java

public class ListViewAdapter extends ArrayAdapter<PageData> { 
    protected List<PageData> data; 
    protected LayoutInflater inflater; 

    public ListViewAdapter(Activity activity, int textViewResourceId, List<PageData> objects){ 
     super(activity, textViewResourceId, objects); 
     data= objects; 
    } 

    public View getView(final int position, View convertView, ViewGroup parent) { 
     LayoutInflater inflater = (LayoutInflater)getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     View row = inflater.inflate(R.layout.item_list, parent, false); 
     PageData pd = data.get(position); 
     TextView tv2 = (TextView)row.findViewById(R.id.cat); 
     tv2.setText(pd.getCategory()); 
//  TextView tv3 = (TextView)row.findViewById(R.id.desc); 
//  tv3.setText(pd.getCategory()); 

     return row; 
    } 
} 

//FragmentItempagerAdapter.java

public class FragmentItemPagerAdapter extends FragmentStatePagerAdapter { 
    private List<PageData> data; 



    public FragmentItemPagerAdapter(FragmentManager fm, List<PageData> data){ 
     super(fm); 
     this.data = data; 
    } 

    @Override 
    public Fragment getItem(int position) { 
     Fragment fragment = new PageFragment(); 
     Bundle args = new Bundle(); 
     args.putString(PageFragment.id, data.get(position).getId()); 
     args.putString(PageFragment.cate, data.get(position).getCategory()); 
     args.putString(PageFragment.code, data.get(position).getCode()); 
     args.putString(PageFragment.desk, data.get(position).getDesk()); 
     args.putString(PageFragment.unit, data.get(position).getUnit()); 
     args.putString(PageFragment.quan, data.get(position).getQuantity()); 

     fragment.setArguments(args); 
     return fragment; 
    } 

    @Override 
    public int getCount() { 
     return data.size(); 
    } 

    public static class PageFragment extends Fragment{ 
     public static final String id = "id"; 
     public static final String cate = "category"; 
     public static final String code = "code"; 
     public static final String desk = "description"; 
     public static final String unit = "unit"; 
     public static final String quan = "Quantity"; 



     @Override 
     public View onCreateView(LayoutInflater inflater, ViewGroup container, 
           Bundle savedInstanceState) { 
      View rootView = inflater.inflate(R.layout.fragment_item, container, false); 
      ((TextView) rootView.findViewById(R.id.item_label2)).setText(
        getArguments().getString(cate)); 
      ((TextView) rootView.findViewById(R.id.item_label3)).setText(
        getArguments().getString(code)); 
      ((TextView) rootView.findViewById(R.id.item_label4)).setText(
        getArguments().getString(desk)); 
      ((TextView) rootView.findViewById(R.id.item_label5)).setText(
        getArguments().getString(unit)); 
      ((TextView) rootView.findViewById(R.id.item_label6)).setText(
        getArguments().getString(quan)); 
      ((TextView) rootView.findViewById(R.id.item_label1)).setText(
        getArguments().getString(id)); 
      ((EditText) rootView.findViewById(R.id.editText2)).setText(
        getArguments().getString(quan)); 

      return rootView; 

     } 


    } 

} 
+0

Используете ли вы Viewpager для реализации этой функции салфетки? Если это так, обратитесь к этому слушателю изменений. https://developer.android.com/reference/android/support/v4/view/ViewPager.OnPageChangeListener.html –

+0

yes im using viewpager и спасибо за ссылку, но можете ли вы дать мне также пример, но все еще плохо пытаетесь его прочитать и дать вам обратную связь как можно скорее :) – RaRa

+0

http://stackoverflow.com/questions/30368641/updating-the-contents-on-tab-changed-in-view-pager Эта ссылка может помочь вам с примером. Выполняйте операции с базой данных вместо сетевых операций, упомянутых в этой ссылке. –

ответ

0

положить этот метод в свои фрагменты

@Override 
    public void setMenuVisibility(final boolean visible) { 
     super.setMenuVisibility(visible); 
     if (!visible) { 

      // called when fragment will change 

      // insertIntoTable this is a method for insert data into your sqlite table 
      insertIntoTable(edittext.getText().toString()); 

     } 
    } 

создать метод insertIntoTable для вставки данных в SQLite таблице и поместить внутри SQLite запроса

+0

сэр, я не могу найти, где я его поставлю – RaRa

+0

Вы добавляете фрагменты в viewpager прямо? –

+0

да сэр плохой сообщение мой код для вас sir – RaRa

0

Вот простой example.Hope это помогает.
Это фрагмент с открытым способом, чтобы получить EditText string-

public class TestFragment extends Fragment { 
Context mContext; 
EditText etData; 

public TestFragment() { 
    mContext = getActivity(); 
} 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 
    View view = inflater.inflate(R.layout.fragment_blank, container, false); 
    etData = (EditText) view.findViewById(R.id.etData); 
    return view; 
} 

public String getEditTextData(){ 
    return etData.getText().toString(); 
} 

}

адаптер для ViewPager -

public class Adapter extends FragmentStatePagerAdapter { 
SparseArray<Fragment> registeredFragments = new SparseArray<Fragment>(); 
public Adapter(FragmentManager fm) { 
    super(fm); 
} 

@Override 
public Fragment getItem(int position) { 
    return new TestFragment(); 
} 

@Override 
public int getCount() { 
    //create two pages 
    return 2; 
} 

@Override 
public Object instantiateItem(ViewGroup container, int position) { 
    Fragment fragment = (Fragment) super.instantiateItem(container, position); 
    registeredFragments.put(position, fragment); 
    return fragment; 
} 

@Override 
public void destroyItem(ViewGroup container, int position, Object object) { 
    registeredFragments.remove(position); 
    super.destroyItem(container, position, object); 
} 

public Fragment getRegisteredFragment(int position) { 
    return registeredFragments.get(position); 
} 

}

и деятельности -

int prevPosition = 0; // first item position 0 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    ViewPager viewPager = (ViewPager) findViewById(R.id.vp); 
    final Adapter adapter = new Adapter(getSupportFragmentManager()); 
    viewPager.setAdapter(adapter); 
    viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() { 
     @Override 
     public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { 

     } 

     @Override 
     public void onPageSelected(int position) { 
      // when moves from one view to another on swiping 
      TestFragment testFragment = (TestFragment) adapter.getRegisteredFragment(prevPosition); 
      prevPosition = position; 
      insertDataIntoTable(testFragment.getEditTextData()); 
     } 

     @Override 
     public void onPageScrollStateChanged(int state) { 

     } 
    }); 
} 

Таким образом, логика каждый раз, когда пользователь просматривает viewpager, мы получаем данные edittext из просматриваемого вида и вставляем его в db. Теперь, чтобы получить данные edittext фрагмента, мы берем на себя помощь адаптера, чтобы вернуть экземпляр фрагмента в определенную позицию. Я тестировал его, и он отлично работает!

+0

его хороший ответ maam, но я попробовал его, и я не могу его реализовать в своих кодах, вы можете реализовать ваш образец кода в моем коде, если ваш не тот занят :(СПАСИБО, ЧТО ТАКОЕ БОЛЬШЕ ДЛЯ ОПЛАТЫ ВНИМАНИЯ С МЕНЯМИ MAAM – RaRa