Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android listitem单击给予ClasscastException_Android_Listview_Listitem - Fatal编程技术网

Android listitem单击给予ClasscastException

Android listitem单击给予ClasscastException,android,listview,listitem,Android,Listview,Listitem,当我点击列表项时,我得到ClasscastException。我想通过单击listitem转到详细信息屏幕 Here is my code: private MyCustomAdapter dataAdapter = null; private View currentView = null; @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-

当我点击列表项时,我得到ClasscastException。我想通过单击listitem转到详细信息屏幕

Here is my code:    

private MyCustomAdapter dataAdapter = null;
     private View currentView = null;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        setContentView(R.layout.manager_leave_requests_list);
        displayListView();
    }

    private void displayListView()
    {
        ArrayList<MLeaveRequests> lrList = new ArrayList<MLeaveRequests>();

        MLeaveRequests requests = new MLeaveRequests("12345678", "Shyam",
                "09/29/2013", "Earned Leave", 10, "08/28/2013", "08/28/2013", 1, "XYZ");
        lrList.add(requests);
        requests = new MLeaveRequests("22345678", "Shyam", "09/29/2013",
                "Earned Leave", 10, "08/28/2013", "08/28/2013", 1, "XYZ");
        lrList.add(requests);
        requests = new MLeaveRequests("32345678", "Shyam", "09/29/2013",
                "Earned Leave", 10, "08/28/2013", "08/28/2013", 1, "XYZ");
        lrList.add(requests);
        requests = new MLeaveRequests("42345678", "Shyam", "09/29/2013",
                "Earned Leave", 10, "08/28/2013", "08/28/2013", 1, "XYZ");
        lrList.add(requests);
        requests = new MLeaveRequests("52345678", "Shyam", "09/29/2013",
                "Earned Leave", 10, "08/28/2013", "08/28/2013", 1, "XYZ");
        lrList.add(requests);
        requests = new MLeaveRequests("62345678", "Shyam", "09/29/2013",
                "Earned Leave", 10, "08/28/2013", "08/28/2013", 1, "XYZ");
        lrList.add(requests);
        requests = new MLeaveRequests("72345678", "Shyam", "09/29/2013",
                "Earned Leave", 10, "08/28/2013", "08/28/2013", 1, "XYZ");
        lrList.add(requests);

        //create an ArrayAdaptar 
          dataAdapter = new MyCustomAdapter(this, R.layout.manager_leave_requests_list_item, lrList);

         ListView list = (ListView) findViewById(R.id.mngrLeaveRequestsList) ;
         list.setAdapter(dataAdapter);

         list.setOnItemClickListener(new OnItemClickListener() {
               public void onItemClick(AdapterView<?> parent, View view,
                 int position, long id) {

                currentView = view;

                //get reference to the MLeaveRequests Object

                 MLeaveRequests requests = (MLeaveRequests) view.getTag();

                Intent reqDetails = new Intent(ManagerLeaveRequestsList.this,LeaveRequestDetails.class);
                Bundle b = new Bundle();
                //pass the country object as a parcel
                b.putParcelable("Request", requests);
                reqDetails.putExtras(b);
                startActivity(reqDetails);

               }
              });
    }
    private class MyCustomAdapter extends ArrayAdapter<MLeaveRequests>{
        private ArrayList<MLeaveRequests> leaves;


        public MyCustomAdapter(
                Context context,
                int managerLeaveRequestsListItem,
                ArrayList<MLeaveRequests> lrList) {
            // TODO Auto-generated constructor stub
            super(context, managerLeaveRequestsListItem, lrList);
            this.leaves = lrList;

        }
        public class ViewHolder{
            TextView requestID = null;
            TextView appliedBy = null;
            TextView appliedOn = null;
        }
        @Override
          public View getView(int position, View convertView, ViewGroup parent)
          {
            ViewHolder holder;

            if(convertView == null)
            {
             LayoutInflater li = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
             convertView = li.inflate(R.layout.manager_leave_requests_list_item, null);
             holder = new ViewHolder();
             holder.requestID = (TextView) convertView.findViewById(R.id.txtMLRID);
             holder.appliedBy = (TextView) convertView.findViewById(R.id.txtMLRAppliedBy);
             holder.appliedOn = (TextView) convertView.findViewById(R.id.txtMLRAppliedOn);
             convertView.setTag(holder);
            }
            else
                holder = (ViewHolder) convertView.getTag();

            final MLeaveRequests mlr = leaves.get(position);
            if(mlr != null){
                mlr.setListPosition(position);
                holder.requestID.setText(mlr.getRequestID());
                holder.appliedBy.setText(mlr.getAppliedBy());
                holder.appliedOn.setText(mlr.getAppliedOn());

            }

            return convertView;
          }

    }

不知道我为什么会犯这个错误。请帮助。

在您的getView函数中
convertView.setTag(mlr)
返回视图
之所以会发生这种情况,是因为您正在setTag中使用ViewHolder对象,并将其强制转换为getTag上的MLeaveRequests对象

-------------------------------------编辑--------------------------------------------

public View getView(int position, View convertView, ViewGroup parent)
{
    ViewHolder holder;

     LayoutInflater li = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
     convertView = li.inflate(R.layout.manager_leave_requests_list_item, null);
     holder = new ViewHolder();
     holder.requestID = (TextView) convertView.findViewById(R.id.txtMLRID);
     holder.appliedBy = (TextView) convertView.findViewById(R.id.txtMLRAppliedBy);
     holder.appliedOn = (TextView) convertView.findViewById(R.id.txtMLRAppliedOn);

    final MLeaveRequests mlr = leaves.get(position);
    convertView.setTag(mlr);
    if(mlr != null){
        mlr.setListPosition(position);
        holder.requestID.setText(mlr.getRequestID());
        holder.appliedBy.setText(mlr.getAppliedBy());
        holder.appliedOn.setText(mlr.getAppliedOn());
    }

    return convertView;
}

你好,热汉,你能告诉我如何更改代码吗。我是android的初学者。在你的
MyCustomAdapter
类中,进入函数
public View getView(int位置,View convertView,ViewGroup父级)
并编写
convertView.setTag(mlr)就在行
返回视图之前如果您仍然遇到任何问题,请随时询问:)Hi Rehan,即使在添加convertView.setTag(mlr)之后;返回视图;我也犯了同样的错误。任何其他帮助。那么可能是因为您正在设置多个标记。。。尝试替换
convertView.setTag(mlr)带有
convertView.setTag(标记ID,mlr)
和在
列表中.setOnItemClickListener
替换
MLeaveRequests请求=(MLeaveRequests)视图.getTag()
to
MLeaveRequests requests=(MLeaveRequests)view.getTag(TAG_ID)
私有最终整数标签_ID=1在类级别初始化
标记ID
。。。我希望它能工作,如果仍然给出相同的错误,请通知我,我将告诉您代码,而不使用viewHolder类,这肯定对您有效:)Hi Rehan,在进行上述更改后,我收到一个错误:java.lang.illegalArgumentException:密钥必须是convertView.setTag(TAG_id,mlr)行中的特定于应用程序的资源id;
public View getView(int position, View convertView, ViewGroup parent)
{
    ViewHolder holder;

     LayoutInflater li = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
     convertView = li.inflate(R.layout.manager_leave_requests_list_item, null);
     holder = new ViewHolder();
     holder.requestID = (TextView) convertView.findViewById(R.id.txtMLRID);
     holder.appliedBy = (TextView) convertView.findViewById(R.id.txtMLRAppliedBy);
     holder.appliedOn = (TextView) convertView.findViewById(R.id.txtMLRAppliedOn);

    final MLeaveRequests mlr = leaves.get(position);
    convertView.setTag(mlr);
    if(mlr != null){
        mlr.setListPosition(position);
        holder.requestID.setText(mlr.getRequestID());
        holder.appliedBy.setText(mlr.getAppliedBy());
        holder.appliedOn.setText(mlr.getAppliedOn());
    }

    return convertView;
}