如何在listview上制作可点击的项目以及我应该选择哪种适配器?

时间:2015-03-22 23:47:31

标签: android listview

这是剧本:

public class LecturAct extends ListActivity {

    private static final String AR_ID = "id_lec";
    private static final String AR_LC = "lec_nm";
    private static final String AR_CLS = "class";
    private static final String EXTRA_DATA = "idr";
    JSONArray lec = null;
    ArrayList<HashMap<String, String>> lec_list = new ArrayList<HashMap<String, String>>();

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        setContentView(R.layout.activity_lec);

        Intent quiz = getIntent();
        String id = quiz.getStringExtra(EXTRA_DATA);

        String link_url = "http://xxxx/xxxx.php?id="+id;

        JSONParser jParser = new JSONParser();

        JSONObject json = jParser.gtJson(link_url);

        try {
            lec = json.getJSONArray("lec");

            for(int i = 0; i < lec.length(); i++){
                JSONObject ar =lec.getJSONObject(i);

                String lectid = ar.getString(AR_ID);
                String lecname = ar.getString(AR_LC);
                String class = ar.getString(AR_CLS);

                HashMap<String, String> map = new HashMap<String, String>();

                map.put(AR_ID, lectid);
                map.put(AR_LC, lecname);
                map.put(AR_CLS, class);

                lec_list.add(map);
            }
        } catch (JSONException e) {
            e.printStackTrace();
        }
        this.adapter_listview();
    }

我试图在listview上制作一个可点击的项目,这是脚本:

public void adapter_listview() {

        ListAdapter adapter = new SimpleAdapter(this, lec_list,
                R.layout.list_item,
                new String[] { AR_ID, AR_CLS, AR_LC}, new int[] {
                        R.id.title, R.id.content, R.id.code});

        setListAdapter(adapter);
        ListView lv = getListView();
        lv.setOnItemClickListener(new OnItemClickListener() {

            @Override
            public void onItemClick(AdapterView<?> parent, View view,int position, long id) {
                String cd = ((TextView) view.findViewById(R.id.code)).getText().toString();
                Intent in = new Intent(LecturAct.this, Quis.class);
                in.putExtra(AR_ID, cd);
                startActivity(in);
            }
        });
    }

但是当我点击一个项目时,它会一直带我到错误的方向,总是把我带到最后一个项目。如果列表中的项目是

  1. physic
  2. 生物学
  3. 运动
  4. 社会
  5. 数学
  6. 然后当我点击生物学或我选择的任何东西时,它总会引导我进入“数学”页面。所以我该怎么做?我使用错误的适配器吗?请帮助我,给我解决方案,使这一点正确:(

4 个答案:

答案 0 :(得分:0)

只需覆盖protected void onListItemClick (ListView l, View v, int position, long id)中的LecturAct,例如

protected void onListItemClick (ListView l, View v, int position, long id) {
    String cd = getListAdapter().getItem(position);
    Intent in = new Intent(LecturAct.this, Quis.class);
    in.putExtra(AR_ID, cd);
    startActivity(in);
}

答案 1 :(得分:0)

  

我的例子就像你的。只需更改你的对象cast.Or String。

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

                  Object obj=(Object)((String) parent.getAdapter().getItem(position));
            String ss=obj.toString();

                Intent i = new Intent(getActivity(), PdfReader.class);
                i.putExtra("catalogPdfUrl", "" +ss;
                getActivity().startActivity(i);

        }
    });

答案 2 :(得分:0)

这个答案就像阿明一样,但差别很小。示例代码:

@Override 
protected void onListItemClick (ListView l, View v, int position, long id) {
    super.onListItemClick(l, v, position, id);

    String mlecture p = (String) l.getItemAtPosition(position);
...
    in.putExtra(AR_ID, lecture);
    startActivity(in);
}

注意:

  • 获取 ListView参数(l),并获取行/项位置以开始。
  • 您不能使用view.findViewById方法,因为ListView(l)已经有UI对象。
  • 使用覆盖onListItemClick,因为使用了ListActivity。

答案 3 :(得分:0)

我更仔细地审核了您的代码。我怀疑数据排列不正确。

更改FROM:

new String[] { AR_ID, AR_CLS, AR_LC},
new int[] { R.id.title, R.id.content, R.id.code});

TO:

new String[] { AR_ID, AR_CLS, AR_LC},
new int[] { R.id.code, R.id.title, R.id.content });

我切换了 R.id.code 。我认为这与in.putExtra( AR_ID ,cd)兼容。由于我不知道Quiz.class,所以没有好办法让我确定。