2017-01-23 17 views
-1

私はswipe fragmentでアプリケーションを開発しています。私の問題はクライアントがビューをスワイプするとその中のデータが自動的にsqliteテーブルから自動的に保存されるということです。 EditTextに値を入力した後にEditTextを入力すると、値はsqlite tableに保存され、別のビューまたは次の項目にスワイプすると保存されます。私は、XMLスワイプフラグメントのsqliteテーブルに挿入

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; 

     } 


    } 

} 
からviewpagerを求める MEを助けてください

//PagerFragment.javaクラス

+0

このスワイプ機能を実装するためにあなたのViewpagerを使用していますか?その場合は、この変更リスナーを参照してください。 https://developer.android.com/reference/android/support/v4/view/ViewPager.OnPageChangeListener.html –

+0

はい私はビューページを使用してリンクをありがとうが、私にも例を与えることができますが、それでも読んでみてくださいできるだけ早くあなたにフィードバックを与えてください:) – 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()); 

     } 
    } 

+0

私はそれを置く場所で見つけることができません – RaRa

+0

あなたはビューページを右に断片を追加していますか? –

+0

はいあなたの病気はあなたのために私のコード投稿 – RaRa

0

をsqliteのテーブルに挿入するデータのための方法insertIntoTableを作成し、SQLiteのクエリ内に置くここで、このことができます簡単なexample.Hopeです。

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); 
} 

}

及び活性 -
これは、パブリックメソッドを持つ断片がviewpagerための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(); 
} 

}

アダプタを取得することです -

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) { 

     } 
    }); 
} 

ロジックは、ユーザがビューページをスワイプするたびに、スワップされたビューからedittextのデータを取得し、dbに挿入します。フラグメントのedittextデータを取得するために、アダプタの助けを借りてフラグメントのインスタンスを特定の位置に戻します。私はそれをテストし、それは正常に動作します!

+0

その素晴らしい答えmaamが、私はそれを試して、私はあなたの実装することができます私のコードで実装することはできませんあなたのサンプルコードを自分のコードに入れておけば、それは忙しいことではありません:(大したことはありません。 – RaRa

関連する問題