Получите идентификатор конкретного элемента из SQLite, когда этот элемент будет щелкнут, и отправьте идентификатор в новое действие - PullRequest
0 голосов
/ 25 марта 2019

Я пытаюсь получить данные из sqlite. Мои данные Sqlite отображаются в списке, я хочу получить "id" определенного элемента из базы данных SQlite , когда элемент щелкается в списке, и идентификатор будет использоваться для получения полных данных этого элемента и отображения в Подробное задание

MainActivity.java

 public class MainActivity extends AppCompatActivity
            implements NavigationView.OnNavigationItemSelectedListener, EnquiryAdapter.OnItemClickListener {

        DbHelper mDbHelper;
        public static final String FORM_ID = "form_id";

        private RecyclerView mRecyclerView;
       // private ArrayList<enquiry> mEnquiryList;
        private EnquiryAdapter mAdapter;


        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
            setSupportActionBar(toolbar);
            mDbHelper = new DbHelper(this);

            FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
            fab.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                   Intent intent = new Intent(MainActivity.this,FormActivity.class);
                   startActivity(intent);
                }
            });

            //RecyclerView Setup
            mRecyclerView = findViewById(R.id.recyclerview);
            mRecyclerView.setHasFixedSize(true);
            mRecyclerView.setLayoutManager(new LinearLayoutManager(this));

            mAdapter = new EnquiryAdapter(MainActivity.this,mDbHelper.getFormData());
            mRecyclerView.setAdapter(mAdapter);
            mAdapter.setOnItemClickListener(MainActivity.this);
     @Override
        public void onItemClick(int position) {


            Intent detailIntent = new Intent(this, DetailedActivity.class);
            startActivity(detailIntent);
        }

Класс адаптера

открытый класс EnquiryAdapter расширяет RecyclerView.Adapter {

    private Context context;
    private Cursor cursor;
    private OnItemClickListener mListner;


    public EnquiryAdapter(Context context, Cursor cursor) {
        this.context = context;
        this.cursor = cursor;
    }


    @NonNull
    @Override
    public EnquiryViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
        View view = LayoutInflater.from(context).inflate(R.layout.enquiry_list,viewGroup,false);
        return new EnquiryViewHolder(view);
    }

    @Override
    public void onBindViewHolder(@NonNull EnquiryViewHolder enquiryViewHolder, int i) {
        if(!cursor.moveToPosition(i)){
            return;
        }

        String nameText = cursor.getString(cursor.getColumnIndex(FormContract.FormEnrty.COLUMN_NAME_NAME));
        String emailText = cursor.getString(cursor.getColumnIndex(FormContract.FormEnrty.COLUMN_NAME_EMAIL));
        int id = cursor.getInt(cursor.getColumnIndex(FormContract.FormEnrty._ID));
        Log.d("id", String.valueOf(id));

        enquiryViewHolder.mNameText.setText(nameText);
        enquiryViewHolder.mEmailText.setText(emailText);
    }

    @Override
    public int getItemCount() {
        //return cursor.getCount();
        return cursor.getCount();
    }

    public class EnquiryViewHolder extends RecyclerView.ViewHolder{

        public TextView mNameText, mEmailText, mDateText;

        public EnquiryViewHolder(@NonNull View itemView) {
            super(itemView);
            mNameText = itemView.findViewById(R.id.name);
            mEmailText = itemView.findViewById(R.id.email);
            mDateText = itemView.findViewById(R.id.date_text);

            itemView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    if(mListner != null){
                        int position = getAdapterPosition();
                        if(position != RecyclerView.NO_POSITION){
                            mListner.onItemClick(position);
                        }
                    }
                }
            });

        }
    }
    public interface OnItemClickListener{
        void onItemClick(int position);

    }
    public void setOnItemClickListener(OnItemClickListener listener){
        mListner = listener;

    }

1 Ответ

1 голос
/ 25 марта 2019

Я думаю, вы можете сделать это

itemView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if(mListner != null){
                    int position = getAdapterPosition();
                    if(position != RecyclerView.NO_POSITION){
                        cursor.moveToPosition(position);
                 int id = cursor.getInt(cursor.getColumnIndex(FormContract.FormEnrty._ID));

                     mListner.onItemClick(position);
                    }
                }
            }
        });
...