1

Got the solution thanks to thomaspsk未能突破意图把额外的方法来发送URL

所以我从在线数据库的解析链接网址,并回收视图中显示它。我也希望通过IntentputExtra()方法

我尝试了用

Bundle bundle = intent.putExtra("image_link",my_data.getImage_link()); 

发送这些网址,但它不工作

这里是一个完整的适配器代码。
另请检查我是否在正确的位置使用点击监听器。
我看到一些人在ViewHolder下使用它。

import android.content.Intent; 

import android.os.Bundle; 
import android.support.v7.widget.RecyclerView; 
import android.content.Context; 
import android.widget.ImageView; 
import android.widget.TextView; 
import android.view.LayoutInflater; 

import java.util.List; 

import com.bumptech.glide.Glide; 

import android.view.View; 
import android.view.ViewGroup; 

public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> { 
    private Context context; 
    private List<MyData> my_data; 

    public MyAdapter(Context context, List<MyData> my_data) { 
     this.context = context; 
     this.my_data = my_data; 
    } 

    @Override 
    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 

     View itemView = LayoutInflater.from(parent.getContext()).inflate(R.layout.recycler_child, parent, false); 

     final ViewHolder holder = new ViewHolder(itemView); 
     itemView.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       int position = holder.getAdapterPosition(); 
       Intent intent = new Intent(context, article.class); 
       Bundle bundle = intent.putExtra("image_link", my_data.getImage_link()); 
       context.startActivity(intent); 
      } 
     }); 

     return new ViewHolder(itemView); 
    } 

    @Override 
    public void onBindViewHolder(ViewHolder holder, int position) { 
     holder.description.setText(my_data.get(position).getDescription()); 
     Glide.with(context).load(my_data.get(position).getImage_link()).into(holder.imageView); 
    } 

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


    public class ViewHolder extends RecyclerView.ViewHolder { 

     public TextView description; 
     public ImageView imageView; 

     public ViewHolder(View itemView) { 
      super(itemView); 
      description = (TextView) itemView.findViewById(R.id.textView); 
      imageView = (ImageView) itemView.findViewById(R.id.image); 
     } 
    } 
} 
+0

只是一个猜测:也许你应该尝试存储“my_data.getImage_link()”的结果为一个字符串,然后你就可以“捆绑包= intent.putExtra(”图片链接”,my_data_string );” – ivanleoncz

+0

你有什么错误? Imho,您需要使用Activity作为您的上下文调用startActivity。 –

回答

0

要使用捆绑简单的做派中的数据如下:

Intent intent = new Intent(context,article.class); 
Bundle bundle = new Bundle(); 
bundle.putString("IMAGE_LINK", my_data.getImage_link()); 
intent.putExtras(bundle); // or intent.putExtra("BUNDLE",bundle); and reveive there : Bundle b = getBundleExtra("BUNDLE"); 
context.startActivity(intent); 

要检索其他活动的数据,你可以遵循:

Bundle bundle = getIntent().getExtras(); 
String imageLink = bundle.getString("IMAGE_LINK"); 
+0

但是我应该如何将image_link绑定在一起? – Nawaz

+0

bundle.putString(“IMAGE_LINK”,my_data.getImage_link());不起作用 – Nawaz

0

首先需要获得该项目从您的列表中以get方法与该项目的网址相比较。

@Override 
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 

    View itemView = LayoutInflater.from(parent.getContext()).inflate(R.layout.recycler_child,parent,false); 

    final ViewHolder holder = new ViewHolder(itemView); 
    itemView.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      int position = holder.getAdapterPosition(); 
      Intent intent = new Intent(context,article.class); 
      intent.putExtra("image_link",my_data.get(position).getImage_link()); 
      context.startActivity(intent); 

     } 
    }); 

    return new ViewHolder(itemView); 
} 
+0

应用程序在点击事件时崩溃 – Nawaz

+0

你能分享错误日志吗? –

+0

现在它不是拍摄不兼容性错误 – Nawaz

0

代码行private Context context;MyAdapter最有可能不是一个活动环境。

MyAdapter myAdapter = new MyAdapter(callerActivity, my_data); 

但这容易泄漏方面:

你的东西,如创建MyAdapter时需要传递活动。


一个更好的办法是使用监听指导被onClick()活动片段

首先,创建您的适配器听众:

public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> { 

    private List<MyData> my_data; 

    public MyAdapter(List<MyData> my_data) { 
    // this.context = context; // You don't need to use context here anymore. 
    this.my_data = my_data; 
    } 

    ... 

    // Define listener member variable 
    private static OnItemClickListener mListener; 

    // Define the listener interface 
    public interface OnItemClickListener { 
    void onItemClick(int position); 
    } 

    // Define the method that allows the parent activity or fragment to define the listener 
    public void setOnItemClickListener(OnItemClickListener listener) { 
    this.mListener = listener; 
    } 
    ... 
} 

,呼吁听众在MyAdapteronCreateViewHolder()当项目点击:

@Override 
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
    View itemView = LayoutInflater.from(parent.getContext()).inflate(R.layout.recycler_child,parent,false); 
    final ViewHolder holder = new ViewHolder(itemView); 
    itemView.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View v) { 
     onItemClick(holder.getAdapterPosition()); 
    } 
    }); 

    return new ViewHolder(itemView); 
} 

最后,您需要在活动中实施MyAdapter.OnItemClickListener或使用适配器的碎片。喜欢的东西:

public class YourActivity extends Activity 
    implements MyAdapter.OnItemClickListener { 

    ... 

    @Override 
    public void onViewCreated(View view, Bundle savedInstanceState) { 
    super.onViewCreated(view, savedInstanceState); 
    // you need to add this after creating the adapter. 
    // this only for example. 
    MyAdapter myAdapter = new MyAdapter(my_data); // Don't use a context here anymore. 
    myAdapter.setOnItemClickListener(this); // Set listener to parent. 
    } 

    // method implemented from MyAdapter.OnItemClickListener 
    @Override 
    public void onItemClick(int position) { 
    // Call the intent here 
    Intent intent = new Intent(this, article.class); 
    Bundle bundle = intent.putExtra("image_link",my_data.get(position).getImage_link()); 
    this.startActivity(intent); 
    } 

    ... 
} 
+0

如果我在活动/适配器上使用OnClick监听器,getActivity位置不起作用 如果我在itemView上使用intent.putExtra(“image_link”,my_data.get(position ).getImage_link()); – Nawaz

+0

然后,如果我点击任何卡片,应用程序崩溃 – Nawaz

+0

我忘记在'onItemClick(int position)'方法中将'my_data.getImage_link()'更改为'my_data.get(position).getImage_link()'。 –