使用RecyclerView的自定义警报对话框

时间:2015-11-06 05:45:58

标签: android android-alertdialog android-recyclerview

我正在使用python3 -OO myapp.py 列出一些文字,现在我想这样做,以便当用户点击文字时弹出自定义警报对话框。

到目前为止我已经尝试了这个但是得到了一个N​​ullPointerException;这可能有什么问题?

RecyclerView

6 个答案:

答案 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

礼貌: Call Activity method from 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

希望这有帮助。

快乐编码:)