2017-01-23 88 views
-1

我正在开发一个应用程序与swipe fragment和我的问题是,客户端需要,如果他们刷过视图里面的数据将自动从sqlite表保存例如在视图中有在输入EditText的值后,它内部的EditText,当它们滑动到另一个视图或下一个项目时,该值将保存在sqlite table中。 PLEASE HELP ME插入到SQLITE表上刷卡片段

//PagerFragment.java类,其中i呼吁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

是的即时通讯使用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()); 

     } 
    } 

创建在SQLite表插入数据的方法insertIntoTable,并把你的SQLite查询

+0

先生我不能找到我要把它放在哪里 – RaRa

+0

你在viewpager中添加片段的权利? –

+0

是的,先生我张贴我的代码为你先生 – RaRa

0

内这里有一个简单的example.Hope这有助于。
这是一个公共方法的片段来获得的EditText与字符串

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的数据并将其插入到数据库中。现在,获取片段的edittext数据,我们借助适配器在特定位置返回片段的实例。我测试了它,它工作正常!

+0

其良好的答案maam,但我试过了,我不能在我的代码中实现它可以实现你的示例代码在我的代码中,如果你不那么忙:(谢谢你这么多,以支持我的注意力 – RaRa