簡體   English   中英

如何在 recyclerview 中提供 onclick 以從 mysql 獲取另一個活動的值

[英]how to give onclick in recyclerview to get values to another activity from mysql

當我想獲取我創建的 Recyclerview 的 ID 時,我遇到了問題。 所以后面Recyclerview在點擊的時候,會根據點擊的ID出現詳情。 對於我存儲在 MySQL 中的數據,我的邏輯有困難。 謝謝

這是 MainActivity.java `public class MainActivity 擴展 AppCompatActivity {

private RecyclerView lvhape;

private RequestQueue requestQueue;
private StringRequest stringRequest;


ArrayList<HashMap<String, String>> list_data;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    String url = "http://192.168.43.77/app_blogvolley/getdata.php";

    lvhape = (RecyclerView) findViewById(R.id.lvhape);
    LinearLayoutManager llm = new LinearLayoutManager(this);
    llm.setOrientation(LinearLayoutManager.VERTICAL);
    lvhape.setLayoutManager(llm);

    requestQueue = Volley.newRequestQueue(MainActivity.this);

    list_data = new ArrayList<HashMap<String, String>>();

    stringRequest = new StringRequest(Request.Method.GET, url, new Response.Listener<String>() {
        @Override
        public void onResponse(String response) {
            Log.d("response ", response);
            try {
                JSONObject jsonObject = new JSONObject(response);
                JSONArray jsonArray = jsonObject.getJSONArray("handphone");
                for (int a = 0; a < jsonArray.length(); a++) {
                    JSONObject json = jsonArray.getJSONObject(a);
                    HashMap<String, String> map = new HashMap<String, String>();
                    map.put("id", json.getString("idhp"));
                    map.put("merk", json.getString("merk"));
                    map.put("tipe", json.getString("tipe"));
                    map.put("gambar", json.getString("gambar"));
                    map.put("keterangan", json.getString("keterangan"));
                    list_data.add(map);
                    AdapterList adapter = new AdapterList(MainActivity.this, list_data);
                    lvhape.setAdapter(adapter);


                    lvhape.addOnItemTouchListener(new RecyclerView.OnItemTouchListener() {
                        GestureDetector gestureDetector = new GestureDetector(getApplicationContext(), new GestureDetector.SimpleOnGestureListener() {

                            public boolean onSingleTapUp(MotionEvent e) {
                                return true;
                            }
                        });

                        @Override
                        public boolean onInterceptTouchEvent(RecyclerView rv, MotionEvent e) {
                            View child = rv.findChildViewUnder(e.getX(), e.getY());
                            if (child != null && gestureDetector.onTouchEvent(e)) {
                                int position = rv.getChildAdapterPosition(child);
                                Intent i = new Intent(getApplicationContext(), DetailKate1.class);
                                i.putExtra("id", list_data.get(position).get("id"));
                                startActivity(i);
                            }
                            return false;
                        }

                        @Override
                        public void onTouchEvent(RecyclerView rv, MotionEvent e) {

                        }

                        @Override
                        public void onRequestDisallowInterceptTouchEvent(boolean disallowIntercept) {

                        }
                    });


                }
            } catch (JSONException e) {
                e.printStackTrace();
            }
        }
    }, new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {
            Toast.makeText(MainActivity.this, error.getMessage(), Toast.LENGTH_SHORT).show();
        }
    });

    requestQueue.add(stringRequest);
}

}`

AdapterList.java

`public class AdapterList extends RecyclerView.Adapter<AdapterList.ViewHolder>{

Context context;
ArrayList<HashMap<String, String>> list_data;

public AdapterList(MainActivity mainActivity, ArrayList<HashMap<String, String>> list_data) {
    this.context = mainActivity;
    this.list_data = list_data;
}

@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.list_item, null);
    return new ViewHolder(view);
}

@Override
public void onBindViewHolder(ViewHolder holder, int position) {
    Glide.with(context)
            .load("http://192.168.43.77/app_blogvolley/img/" + list_data.get(position).get("gambar"))
            .crossFade()
            .placeholder(R.mipmap.ic_launcher)
            .into(holder.imghape);
    holder.txthape.setText(list_data.get(position).get("merk"));
    holder.txtmerk.setText(list_data.get(position).get("tipe"));
}

@Override
public int getItemCount() {
    return list_data.size();
}

public class ViewHolder extends RecyclerView.ViewHolder {
    TextView txthape;
    TextView txtmerk;
    ImageView imghape;

    public ViewHolder(View itemView) {
        super(itemView);

        txthape = (TextView) itemView.findViewById(R.id.txthape);
        txtmerk = (TextView) itemView.findViewById(R.id.txtmerk);
        imghape = (ImageView) itemView.findViewById(R.id.imghp);
    }
}

} `

DetailKate1.java(作為點擊回收站時的新活動)

`public class DetailKate1 extends AppCompatActivity {

public TextView txtTitle;

ArrayList<HashMap<String, String>> list_data;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_detail_kate1);

    getSupportActionBar().setHomeButtonEnabled(true);
    getSupportActionBar().setDisplayHomeAsUpEnabled(true);

    txtTitle = (TextView) findViewById(R.id.txtTitle);
    txtTitle.setText(getIntent().getStringExtra("id"));

}

} `

RecyclerView中實現listener器的方法有很多,最常見的方法是擁有一個interface並將其用作適配器上的偵聽器來檢索當前單擊的項目。

你可以有類似的東西

interface ItemListener { public <HashMap<String, String> onClick(<HashMap<String, String> item); }

您可以在構造函數上傳遞它的實現,將其保存為屬性,然后在onBindViewHolder中實現它,例如

holder.itemView.setOnClickListener({ listener.onClick(list_data.get(position)); })

然后在你的Activity中,你只需要實現這個接口,你就可以點擊當前的item,獲取id沒有問題!

我希望這可以幫助你解決這個問題:)

也許你可以試試這個,它會讓你點擊項目並發送 id。 將此添加到您的 onBindViewHolder

@Override
public void onBindViewHolder(ViewHolder holder, int position) {
    Glide.with(context)
            .load("http://192.168.43.77/app_blogvolley/img/" + list_data.get(position).get("gambar"))
            .crossFade()
            .placeholder(R.mipmap.ic_launcher)
            .into(holder.imghape);
    holder.txthape.setText(list_data.get(position).get("merk"));
    holder.txtmerk.setText(list_data.get(position).get("tipe"));

    holder.itemView.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Intent intent = new Intent(context, DetailKate1.class);
            intent.putExtra("id", list_data.get(position).get("id"));
            context.startActivity(intent);
        }
    });

}

然后您的 DetailKate1 class 將使用

txtTitle.setText(getIntent().getStringExtra("id"));

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM