在onCreatView方法中没有调用setOnItemClickListener?

时间:2013-05-06 09:45:53

标签: android android-listfragment

我正在开发第一个Android应用程序,我有一个扩展SherlockListFragment的片段类。当我在setOnItemClickListener中设置onCreateView并实施onItemClick时,当我点击一行(列表)时,我没有得到任何响应。列表在我的应用中正确显示。我希望当用户点击行表单listview时,我的另一个活动会调用。我很瞪眼但没有得到正确答案。 我无法理解问题出在哪里。谁能告诉我在下面的代码中我做错了什么?

以下是我的代码

public class ResidentialFragActivity extends SherlockListFragment {

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle saved) {

    View view = inflater.inflate(R.layout.project_list,container, false);
    resListviewId = (ListView)view.findViewById(android.R.id.list);
    linearProgress = (LinearLayout)view.findViewById(R.id.linlaHeaderProgress);
    projectList = new ArrayList<HashMap<String,String>>();

    new LoadProjects().execute();
    resListviewId.setOnItemClickListener(new android.widget.AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> arg0, View view, int arg2,
                long arg3) {
            Intent href = new Intent(getSherlockActivity(), ProjectDetailActivity.class);

            // send project id to project detail activity to get list of Phases under that project
            String proj_id = ((TextView) view.findViewById(R.id.projectId)).getText().toString();

            href.putExtra("proj_id", proj_id);     
            getSherlockActivity().startActivity(href);
        }
    });
    return view;
}


//inner class for network operation
private class LoadProjects extends AsyncTask<String, String, String> {

    protected void onPreExecute() {
        linearProgress.setVisibility(View.VISIBLE);
    }

    @Override
    protected String doInBackground(String... params) {

        //call webservice
    }

    @Override
    protected void onPostExecute(String result) {
        linearProgress.setVisibility(View.GONE);

        ListAdapter projAdapter = new SimpleAdapter(getSherlockActivity(),
                projectList, R.layout.project_list_item, 
                new String[] {PROJ_ID,PROJ_NAME,EDIT_RIGHTS}, new int[] 
                        {R.id.projectId,R.id.projectName,R.id.projectSubName});
        //updating the UI
        setListAdapter(projAdapter);
    }
        }
}

以下是listview的布局

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:layout_marginTop="10dp"
    android:background="@color/White"
    android:orientation="vertical" >

    <ListView
        android:id="@android:id/list"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_marginLeft="1dp"
        android:divider="@drawable/divider"
        android:focusableInTouchMode="true"     
        android:smoothScrollbar="true"
        android:dividerHeight="1.5dp"
        android:scrollbarThumbVertical="@drawable/divider" 
        android:drawSelectorOnTop="false"
        android:listSelector="@drawable/list_selector">
    </ListView>

</LinearLayout>

提前致谢..

1 个答案:

答案 0 :(得分:1)

您应该覆盖onListItemClick而不是resListviewId.setOnItemClickListener ..因为您正在将适配器设置为setListAdapter(projAdapter);

中的默认适配器
@Override
public void onListItemClick(ListView l, View v, int position, long id) {
        Intent href = new Intent(getSherlockActivity(), ProjectDetailActivity.class);

        // send project id to project detail activity to get list of Phases under that project
        String proj_id = ((TextView) view.findViewById(R.id.projectId)).getText().toString();

        href.putExtra("proj_id", proj_id);     
        startActivity(href);
}