Как получить строку из sqlite внутри фрагмента viewpager? - PullRequest
0 голосов
/ 06 ноября 2019

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

Я пытался установить теги на ViewPager, но я все еще не могу заставить его работать.

Код для моего DBAdapter

public class DBAdapter {
public static final String KEY_ROWID = "_id";
public static final String KEY_ISDONE = "isdone";
public static final String KEY_TITLE = "title";
public static final String KEY_LIST_ID="list_id";

public static final String KEY_LISTID = "_id";
public static final String KEY_LISTNAME="listName";



private static final String TAG = "DBAdapter";
private static final String DATABASE_NAME = "shopping_lists";
private static final String ITEMS_TABLE_NAME = "list_items";
private static final String LISTS_TABLE_NAME = "lists";


private static final int DATABASE_VERSION = 13;




//create lists table
private static final String LISTS_TABLE_CREATE =
        "create table lists ("
                +" _id integer primary key autoincrement, "
                +" listName text not null,"
                +" recentlyUsed boolean  not null DEFAULT 0"
                +" );";

//create items table
private static final String ITEMS_TABLE_CREATE =
        "create table list_items ("
                +"_id integer primary key autoincrement, "
                +" isdone boolean  not null DEFAULT 0,"
                +" title text not null,"
                +" list_id integer,"
                +" quantity integer not null DEFAULT 1,"
                +" FOREIGN KEY(list_id) REFERENCES lists(_id)"
                +" );";

private final Context context;
private DatabaseHelper DBHelper;
private SQLiteDatabase db;
public DBAdapter(Context ctx)
{
    this.context = ctx;
    DBHelper = new DatabaseHelper(context);
}

Код для моего фрагмента ViewPager

public class ListFragment extends Fragment {
int position;
long lid;
private ViewPager viewPager;

public ListFragment(int pos,long id) {
    // Required empty public constructor
    position=pos;
    lid=id;

}
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);


}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    // Inflate the layout for this fragment
    View view=inflater.inflate(R.layout.fragment_list, container, false);
    viewPager = (ViewPager) view.findViewById(R.id.view_pager);
    viewPager.setAdapter(new 
 FragmentAdapter(getChildFragmentManager()));
    return view;
   }

  }

Код для FragmentAdapter

  public class FragmentAdapter extends FragmentStatePagerAdapter {
public FragmentAdapter(FragmentManager fm) {
    super(fm, FragmentStatePagerAdapter.BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT);
}

@Override
public Fragment getItem(int position) {
    Bundle bundle = new Bundle();
    RestFragment rfrag=new RestFragment();

    rfrag.setArguments(bundle);

    return rfrag;
}

@Override
public int getCount() {
    return 5;
}
}

Код для фрагмента, отображаемого в окне просмотра

  public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    // Inflate the layout for this fragment
    View view=inflater.inflate(R.layout.fragment_rest, container, false);
    Log.d("current p",id+"");

    FloatingActionButton fab = view.findViewById(R.id.floatingActionButton1);

    recyclerView = (RecyclerView) view.findViewById(R.id.item_recycler_view);
    recyclerView.setHasFixedSize(true);
    layoutManager = new LinearLayoutManager(getActivity());
    recyclerView.setLayoutManager(layoutManager);
    db=new DBAdapter(getActivity());
    db.open();

    mCursor=db.getAllItems(id);



    mAdapter = new itemAdapter(mCursor, getActivity(), new itemAdapter.OnItemClicked2() {
        @Override
        public void onItemClick(View v, int position,long id) {



        }
    });
    recyclerView.setAdapter(mAdapter);
    fab.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Log.d("new ittem",id+"");
            db.insertNewItem("itemx",id);
            mAdapter.swapCursor(db.getAllItems(id));
        }
    });
    new ItemTouchHelper(new ItemTouchHelper.SimpleCallback(0,ItemTouchHelper.LEFT|ItemTouchHelper.RIGHT) {
        @Override
        public boolean onMove(@NonNull RecyclerView recyclerView, @NonNull RecyclerView.ViewHolder viewHolder, @NonNull RecyclerView.ViewHolder target) {
            return false;
        }

        @Override
        public void onSwiped(@NonNull RecyclerView.ViewHolder viewHolder, int direction) {
            db.deleteItem((long) viewHolder.itemView.getTag());
        }
    }).attachToRecyclerView(recyclerView);
    return view;
}

1 Ответ

0 голосов
/ 06 ноября 2019

Вы можете использовать общий ViewModal или реализовать связь через родительский Activity, используя интерфейсы.

https://developer.android.com/training/basics/fragments/communicating

Предоставляет все детали

...