kevinjqy 2014-11-09 15:45 采纳率: 0%
浏览 2365

fragment中额外加入时间选择器dialog的布局

public class ReleaseFragment extends Fragment implements View.OnTouchListener{

private EditText etStartTime; 

public ReleaseFragment() {
    // TODO Auto-generated constructor stub
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    etStartTime = (EditText)getActivity().findViewById(R.id.time_actionbar_release); 
    etStartTime.setOnTouchListener(this); 
    return inflater.inflate(R.layout.fragment_actionbar_release, null);

}

@Override
public boolean onTouch(View v, MotionEvent event) {
    // TODO Auto-generated method stub
    if (event.getAction() == MotionEvent.ACTION_DOWN) { 

        AlertDialog.Builder builder = new AlertDialog.Builder(this.getActivity()); 
        View view = View.inflate(this, R.layout.date_time_dialog, null); 
        final DatePicker datePicker = (DatePicker) view.findViewById(R.id.date_picker); 
        //以上两行报错,原因无法初始化两个布局
        builder.setView(view); 

        Calendar cal = Calendar.getInstance(); 
        cal.setTimeInMillis(System.currentTimeMillis()); 
        datePicker.init(cal.get(Calendar.YEAR), cal.get(Calendar.MONTH), cal.get(Calendar.DAY_OF_MONTH), null);  

        if (v.getId() == R.id.time_actionbar_release) { 
            final int inType = etStartTime.getInputType(); 
            etStartTime.setInputType(InputType.TYPE_NULL); 
            etStartTime.onTouchEvent(event); 
            etStartTime.setInputType(inType); 
            etStartTime.setSelection(etStartTime.getText().length()); 

            builder.setTitle("选取起始时间"); 
            builder.setPositiveButton("确  定", new DialogInterface.OnClickListener() { 

                @Override 
                public void onClick(DialogInterface dialog, int which) { 

                    StringBuffer sb = new StringBuffer(); 
                    sb.append(String.format("%d-%02d-%02d",  
                            datePicker.getYear(),  
                            datePicker.getMonth() + 1, 
                            datePicker.getDayOfMonth())); 
                    sb.append("  "); 

                    etStartTime.setText(sb);                      

                    dialog.cancel(); 
                } 
            }); 

        } 

        Dialog dialog = builder.create(); 
        dialog.show(); 
    }
    return true;
}

}

  • 写回答

1条回答 默认 最新

  • 你知我知皆知 2024-08-03 02:03
    关注

    以下回答参考 皆我百晓生券券喵儿 等免费微信小程序相关内容作答,并由本人整理回复。

    在Android中,onTouch方法用于监听用户对视图的操作。当用户触碰视图时,这个方法会被调用。

    然而,在你的代码中,你需要处理一个错误:当你尝试使用getActivity()来获取到视图的时候,你实际上是在获取到的是ReleaseFragment对象的引用,而不是View对象的引用。因此,你需要先获取到View对象的引用,然后再去调用setOnTouchListener方法。

    以下是一个修改后的版本:

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        // 获取到View对象的引用
        View rootView = inflater.inflate(R.layout.fragment_actionbar_release, null);
        etStartTime = (EditText)rootView.findViewById(R.id.time_actionbar_release); 
        etStartTime.setOnTouchListener(this); 
    
        // 其他代码...
        return rootView;
    }
    

    然后,你应该可以正常地处理用户的触摸事件了。

    评论

报告相同问题?