我正在使用python3 -OO myapp.py
列出一些文字,现在我想这样做,以便当用户点击文字时弹出自定义警报对话框。
到目前为止我已经尝试了这个但是得到了一个NullPointerException;这可能有什么问题?
RecyclerView
答案 0 :(得分:4)
没关系我忘了初始化我的上下文
context = itemView.getContext();
答案 1 :(得分:3)
这不是您的查询的答案,而是处理此方案的更好方法。
使用回调方法。
在您的活动中:
这将实现我们if($result = mysql_query($_SESSION['sql_query']) ) // first line of your code after include.
中的界面。在此示例中,当用户点击Adapter
中的项目时会调用它。
RecyclerView
在你的适配器中:
在Activity中,我们启动了 public class MyActivity extends Activity implements AdapterCallback {
private MyAdapter mMyAdapter;
@Override
public void onMethodCallback() {
// Show your alert
}
@Override
protected void onCreate(final Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
this.mMyAdapter = new MyAdapter(this);
}
}
并将其作为参数传递给构造函数。这将启动我们的回调方法接口。您可以看到我们使用回调方法进行用户点击。
Adapter
答案 2 :(得分:2)
final Dialog dialog = new Dialog(your_activity_context);
答案 3 :(得分:0)
您使用的是context
null ,因此请在context
构造函数和 CBAdapter 构造函数中传递ViewHolder
,如同下面:
public class CBAdapter extends RecyclerView.Adapter<CBAdapter.ViewHolder> {
List<AdapterData> mItems;
Context context;
public CBAdapter(Context context) {
super();
this.context = context;
.....
}
在ViewHolder类中
class ViewHolder extends RecyclerView.ViewHolder{
public TextView textOne;
private Context mcontext;
public ViewHolder(View itemView, Context mcontext) {
super(itemView);
this.mcontext = mcontext;
....
}
答案 4 :(得分:0)
与问题没有直接关系,虽然我求求你:不要在适配器内设置onClickListener-s!
这是应该做的:
private class ItemDataHolder extends RecyclerView.ViewHolder implements View.OnLongClickListener{
private final String TAG = ItemDataHolder.class.getSimpleName();
/**
* Define view's elements
*/
/**
* Define object instance
*/
private Item mData;
// Constructor
public MessageDataHolder(View itemView) {
super(itemView);
/**
* Init elements
*/
itemView.setOnLongClickListener(this);
}
/**
* Method to handle long click on the item
* @param v View to handle click on
* @return
*/
@Override
public boolean onLongClick(View v) {
Log.v(TAG, "Long click fired!");
return false;
}
/**
* Function to update view's elements
* @param message Good data to be updated to
*/
public void bindData(Item message) {
mData = message;
/**
* Set values of views here
**/
}
}
希望我的回答能帮助别人写出更好的代码:)
答案 5 :(得分:-2)
编写此代码:
final Dialog dialog = new Dialog(CBAdapter.this);
而不是
final Dialog dialog = new Dialog(context);
(或)
context = CBAdapter.this; // Initialize context
希望这有帮助。
快乐编码:)