【问题标题】:Getting String out of custom List View从自定义列表视图中获取字符串
【发布时间】:2016-10-11 18:18:01
【问题描述】:

所以我想要做的是在点击一个项目时获取一个字符串值。 但是通过此代码,当我单击该项目时,我得到了转换器类的位置或类似的东西,我不明白。 祝酒词中的“MainActivity$Converter@30e6eb1”。我只想让主题部分出现在吐司中。

   @Override
    protected void onPostExecute(String result) {

        JSONObject jsonObject;
        JSONArray jsonArray;
        CustomAdapter customAdapter;
        ListView listview;

        listview = (ListView) findViewById(R.id.xlistview);
        customAdapter = new CustomAdapter(getApplicationContext(), R.layout.row_layout);
        listview.setAdapter(customAdapter);
                                                                                 //Log.d("json_raw_home",result);

        if (result != null) {                                                    //Log.d("post execute",result);
            try {

                jsonObject = new JSONObject(result);
                jsonArray = jsonObject.getJSONArray("data");
                int count = 0;
                String subject, description;
                while (count < jsonArray.length()) {
                    JSONObject JO = jsonArray.getJSONObject(count);
                    subject = JO.getString("subject");
                    description = JO.getString("description");

                    Converter converter = new Converter(subject, description);
                    customAdapter.add(converter);

                    count++;
                }
            } catch (JSONException e) {
                e.printStackTrace();
            }


        }

        listview.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                String item = String.valueOf(parent.getItemAtPosition(position));
                Toast.makeText(getApplicationContext(),item, Toast.LENGTH_LONG).show();}
        });
    }
}

public class CustomAdapter extends ArrayAdapter {
    List list = new ArrayList();

    public CustomAdapter(Context context, int resource) {
        super(context, resource);
    }

    @Override
    public void add(Object object) {
        super.add(object);
        list.add(object);
    }

    @Override
    public int getCount() {
        return list.size();
    }

    @Override
    public Object getItem(int position) {
        return list.get(position);
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        View row;
        row = convertView;
        ContactHolder contactHolder;

        if(row==null)
        {
            LayoutInflater layoutInflater = (LayoutInflater) this.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            row = layoutInflater.inflate(R.layout.row_layout,parent,false);
            contactHolder=new ContactHolder();
            contactHolder.tv_subject=(TextView)row.findViewById(R.id.xsubject_tv);
            contactHolder.tv_description=(TextView)row.findViewById(R.id.xdescription_tv);
            row.setTag(contactHolder);
        }

        else
        {
            contactHolder=(ContactHolder)row.getTag();
        }

        Converter converter = (Converter) this.getItem(position);
        contactHolder.tv_subject.setText(converter.getSubject());
        contactHolder.tv_description.setText(converter.getDescription());
        return row;
    }

    public class ContactHolder{
        TextView tv_subject,tv_description;
    }


}

public class Converter {
    private String subject,description;

    public Converter(String subject, String description) {
        this.setSubject(subject);
        this.setDescription(description);
    }

    public String getSubject() {
        return subject;
    }

    public void setSubject(String subject) {
        this.subject = subject;
    }

    public String getDescription() {
        return description;
    }

    public void setDescription(String description) {
        this.description = description;
    }
}

}

【问题讨论】:

    标签: android android-studio-2.0


    【解决方案1】:

    改变

    String item = String.valueOf(parent.getItemAtPosition(position));
    

    String item = ((Converter)parent.getAdapter().getItem(position)).getSubject() 
    

    【讨论】:

    • 你是上天派来的...... :D 我需要一个导师你能帮我吗?
    • su kaho mota bhai?
    • SO 随时为您提供帮助。你可以问问题,你一定会得到答案。
    • 我已经在 fb 上给你发了一条消息。
    【解决方案2】:

    您将 Converter 对象传递给 CustomAdapter 以列出它们。因此,如果您调用 getItem,则必须将 Object 连接到 Converter。所以;

    改变

    String item = String.valueOf(parent.getItemAtPosition(position));
    

    String item = ((Converter)parent.getAdapter().getItem(position)).getSubject();
    

    所以最终代码:

    listview.setOnItemClickListener(new AdapterView.OnItemClickListener() {
                @Override
                public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                    String item = ((Converter)parent.getAdapter().getItem(position)).getSubject();
                    Toast.makeText(getApplicationContext(),item, Toast.LENGTH_LONG).show();}
            });
    

    【讨论】:

      【解决方案3】:

      parent.getItemAtPosition(位置);无论您从 getItem(position) 返回什么,都返回 at 位置的对象。

      转换器项 = (转换器)parent.getItemAtPosition(position);

      Toast.makeText(getApplicationContext(),item.getSubject(), Toast.LENGTH_LONG).show();

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多