【问题标题】:How to refresh second tab fragment如何刷新第二个标签片段
【发布时间】:2017-01-17 07:25:19
【问题描述】:

我面临一个问题,即当我从第一个选项卡片段将数据插入 sqlite 数据库时,当我从第二个选项卡片段中选择时,它无法立即显示,只能重新启动应用程序才能显示数据。

主要活动

public class MainActivity extends AppCompatActivity implements TabLayout.OnTabSelectedListener{

//This is our tablayout
private TabLayout tabLayout;
//This is our viewPager
private ViewPager viewPager;
int ans =3;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    //Adding toolbar to the activity
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);

    //Initializing the tablayout
    tabLayout = (TabLayout) findViewById(R.id.tabLayout);

    BasePagerAdapter adapter = new BasePagerAdapter(getSupportFragmentManager());
    Tab1 tab1 = new Tab1();
    Tab2 tab2 = new Tab2();
    Tab3 tab3 = new Tab3();

    adapter.addFragment(tab1, "1");
    adapter.addFragment(tab2, "2");
    adapter.addFragment(tab3, "3");
    //Initializing viewPager
    viewPager = (ViewPager) findViewById(R.id.pager);

    //Adding adapter to pager
    viewPager.setAdapter(adapter);

    //Adding onTabSelectedListener to swipe views
    tabLayout.setOnTabSelectedListener(this);
    tabLayout.setupWithViewPager(viewPager);
    tabLayout.setTabGravity(TabLayout.GRAVITY_FILL);
    tabLayout.setupWithViewPager(viewPager);

}

@Override
public void onTabSelected(TabLayout.Tab tab) {
    viewPager.setCurrentItem(tab.getPosition());
}

@Override
public void onTabUnselected(TabLayout.Tab tab) {

}

@Override
public void onTabReselected(TabLayout.Tab tab) {

}
public class BasePagerAdapter extends FragmentPagerAdapter {
    private final List<Fragment> mFragmentList = new ArrayList<>();
    private final List<String> mFragmentTitleList = new ArrayList<>();
    public BasePagerAdapter(FragmentManager manager) {
        super(manager);
    }

    @Override
    public Fragment getItem(int position) {
        return mFragmentList.get(position);
    }

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


    @Override
    public CharSequence getPageTitle(int position) {
        return mFragmentTitleList.get(position);
    }


    public void removeFragment(int position) {
        mFragmentTitleList.remove(position);
        mFragmentList.remove(position);
        notifyDataSetChanged();

    }
    public void addFragment(Fragment fragment, String title) {
        mFragmentList.add(fragment);
        mFragmentTitleList.add(title);
    }

}

}

第一个片段

public class Tab1 extends Fragment {



EditText editext,editext2,editext3;
Button test;
DBController db;

//Overriden method onCreateView
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    View h = inflater.inflate(R.layout.tab1, container, false);
    //Returning the layout file after inflating
    //Change R.layout.tab1 in you classest
    editext =(EditText)h.findViewById(R.id.editText);
    editext2 =(EditText)h.findViewById(R.id.editText2);
    editext3 =(EditText)h.findViewById(R.id.editText3);
    test = (Button)h.findViewById(R.id.button);

    test.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
           String name = editext.getText().toString();
           String hh = editext2.getText().toString();
           String image = editext3.getText().toString();

            SQLiteOpenHelper db = new DBController(getActivity());
            SQLiteDatabase db1 = db.getWritableDatabase();
            ContentValues cv = new ContentValues();
            cv.put("CategoryName", name);
            cv.put("CategoryH", hh);
            cv.put("CategoryImage", image);

            db1.insert("Category", null, cv);
            db1.close();
        }
    });



    return  h;
}

第二个片段

public class Tab2 extends Fragment {
List<Category> category;
DBController db;
ListView testlist;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

    View h = inflater.inflate(R.layout.tab2, container, false);
    testlist = (ListView)h.findViewById(R.id.listview);
    category = getProList();
    testlist.setAdapter(new ViewAdapter());


        return h;

}
public class ViewAdapter extends BaseAdapter {

    LayoutInflater mInflater;

    public ViewAdapter() {
        mInflater = LayoutInflater.from(getActivity());
    }

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

    @Override
    public Object getItem(int position) {
        return null;
    }

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

    @Override
    public View getView(final int position, View convertView, ViewGroup parent) {

        if (convertView == null) {
            convertView = mInflater.inflate(R.layout.testlist_view, null);
        }

        final TextView Pname = (TextView) convertView.findViewById(R.id.TPname);
        Pname.setText("" + category.get(position).getCategoryName());

        final TextView PX = (TextView) convertView.findViewById(R.id.TPX);
        PX.setText("" + category.get(position).getCategoryH());

        final TextView PY = (TextView) convertView.findViewById(R.id.TPY);
        PY.setText("" + category.get(position).getCategoryImage());


        notifyDataSetChanged();

        return convertView;
    }
}

public List<Category> getProList() {

    String selectQuery = "SELECT  * FROM Category ";
    db = new DBController(getActivity());
    SQLiteDatabase db1 = db.getReadableDatabase();
    Cursor cursor = db1.rawQuery(selectQuery, null);
    List<Category> Prolist = new ArrayList<Category>();
    if (cursor.moveToFirst()) {
        do {
            Category list = new Category();
            list.setCategoryName(cursor.getString(cursor.getColumnIndex("CategoryName")));
            list.setCategoryW(cursor.getString(cursor.getColumnIndex("CategoryH")));
            list.setCategoryImage(cursor.getString(cursor.getColumnIndex("CategoryImage")));

            Prolist.add(list);
        } while (cursor.moveToNext());
    }

    return Prolist;
}

【问题讨论】:

  • 向sqlite插入数据后需要刷新第二个标签。
  • @DhavalPatel 谢谢,我可以知道如何刷新我的标签 2 吗?
  • use this link 刷新
  • 只是detach()attach() 片段,它会重绘它,所以如果你在onCreateView() 中获取数据,它将显示更新的数据
  • 感谢@LucaNicoletti 它对我有用

标签: android sqlite android-fragments


【解决方案1】:

只有detach()attach() 片段,它会重绘它,所以如果你在onCreateView() 中获取数据,它将显示更新的数据。

【讨论】:

    【解决方案2】:

    您几乎没有选择如何处理这个问题。

    首先是使用CursorLoader。有一个documentation如何使用loaders。

    第二是实现两个片段之间的回调。还有文档如何communicate between fragments

    在您的情况下,只需在第二个 Fragment onDataSaved 中实现回调,并在将数据保存到数据库时在第一个 Fragment 中调用此方法。

    public interface DataSavedListener {
        void onDataSaved();
    } 
    

    第二个片段

    public class Tab2 extends Fragment implements DataSavedListener {
    List<Category> category;
    DBController db;
    ListView testlist;
    
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    
        View h = inflater.inflate(R.layout.tab2, container, false);
        testlist = (ListView) h.findViewById(R.id.listview);
        category = getProList();
        testlist.setAdapter(new ViewAdapter());
    
    
        return h;
    
    }
    
    @Override
    public void onDataSaved() {
        getProList()
    }
    }
    

    第一个片段

    public class Tab1 extends Fragment {
     DataSavedListener dataSavedListener;
     //Overriden method onCreateView
     @Override
     public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    //you code here
    
     test.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
           //you code here
    
           dataSavedListener.onDataSaved();
        }
    });
    
    return  h;
    }
    

    【讨论】:

      猜你喜欢
      • 2017-12-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-10
      相关资源
      最近更新 更多