Java Android:设置并获取包含文本和图像的列表的单击项id。

Java Android:设置并获取包含文本和图像的列表的单击项id。,java,android,listview,click,Java,Android,Listview,Click,我正在从事一个Android项目,在这个项目中,我向用户显示了一个项目列表及其图像。现在的问题是,由于我必须进行修改以设置列表,我不知道如何更改代码以包含用户正在单击的对象的id。我不想要这个职位,但是想要从服务器收到的id。任何帮助都很好。非常感谢。:-) 请注意,相关代码更多地出现在下面的第一个类中,如果需要修改,我刚刚将LazyAdapter放入其中。非常感谢 GroupCanvasActivity.java: public class GroupCanvasActivity extend

我正在从事一个Android项目,在这个项目中,我向用户显示了一个项目列表及其图像。现在的问题是,由于我必须进行修改以设置列表,我不知道如何更改代码以包含用户正在单击的对象的id。我不想要这个职位,但是想要从服务器收到的id。任何帮助都很好。非常感谢。:-)

请注意,相关代码更多地出现在下面的第一个类中,如果需要修改,我刚刚将LazyAdapter放入其中。非常感谢

GroupCanvasActivity.java:

public class GroupCanvasActivity extends Activity {

    private static volatile Long groupAccountid = (long) 0;

    List<RestCanvas> restCanvasList = new ArrayList<>();

    private CanvasServiceImpl canvasService = new CanvasServiceImpl();

    LazyAdapter lazyAdapter;
    ListView listView;

    static final String mcanvasid = "canvasid";
    static final String mcanvastitle = "canvastitle";
    static final String mcanvasname = "mcanvasname";
    static final String mcanvasimage = "mcanvasimage";

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.canvaslayout);


        Bundle extras = getIntent().getExtras();
        if (extras != null) {
            groupAccountid = extras.getLong("groupid");
        }

        restCanvasList = this.canvasService.getGroupCanvasForGroupAccount(groupAccountid);

        ArrayList<HashMap<String, String>> canvaslist = new ArrayList<HashMap<String, String>>();
        for (RestCanvas restCanvas : restCanvasList) {
            HashMap<String, String> canvasDisplay = new HashMap<>();
// The below mcanvasid is what I would like to get when clicked
            canvasDisplay.put("mcanvasid", String.valueOf(restCanvas.getMcanvasid()));
            canvasDisplay.put("mcanvastitle", restCanvas.getMcanvastitle());
            canvasDisplay.put("mcanvasname", restCanvas.getMcanvasname());
            canvasDisplay.put("mcanvasimage", restCanvas.getMcanvasimage());
            canvaslist.add(canvasDisplay);
        }

        listView = (ListView) findViewById(R.id.canlist);

        lazyAdapter = new LazyAdapter(this, canvaslist);
        listView.setAdapter(lazyAdapter);

        listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {

            @Override
            public void onItemClick(AdapterView<?> parent, View view,
                                    int position, long id) {
// In the for loop above, you can see the mcanvasid, which I would like to use here. 

            }
        });


    }
}
公共类GroupCanvasActivity扩展活动{
私有静态可变长groupAccountid=(长)0;
List restCanvasList=newarraylist();
private CanvasServiceImpl canvasService=新的CanvasServiceImpl();
懒散适配器懒散适配器;
列表视图列表视图;
静态最终字符串mcanvasid=“canvasid”;
静态最终字符串mcavastitle=“canvastitle”;
静态最终字符串mcanvasname=“mcanvasname”;
静态最终字符串mcanvasimage=“mcanvasimage”;
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.canvaslayout);
Bundle extras=getIntent().getExtras();
如果(附加值!=null){
groupAccountid=extras.getLong(“groupid”);
}
restCanvasList=this.canvasService.getGroupCanvasForGroupAccount(groupAccountid);
ArrayList canvaslist=新建ArrayList();
for(RestCanvas RestCanvas:restCanvasList){
HashMap canvasDisplay=新建HashMap();
//下面的mcanvasid是我单击时希望得到的
canvasDisplay.put(“mcanvasid”,String.valueOf(restCanvas.getMcanvasid());
canvasDisplay.put(“mcavastile”,restCanvas.getmcavastile());
canvasDisplay.put(“mcanvasname”,restCanvas.getMcanvasname());
canvasDisplay.put(“mcanvasimage”,restCanvas.getMcanvasimage());
画布列表。添加(画布显示);
}
listView=(listView)findViewById(R.id.canlist);
lazyAdapter=新的lazyAdapter(这是画布列表);
setAdapter(lazyAdapter);
setOnItemClickListener(新的AdapterView.OnItemClickListener(){
@凌驾
public void onItemClick(AdapterView父级、视图、,
内部位置,长id){
//在上面的for循环中,您可以看到mcanvasid,我想在这里使用它。
}
});
}
}
LazyAdapter.java:

  public class LazyAdapter extends BaseAdapter {

        private Activity activity;
        private ArrayList<HashMap<String, String>> data;
        private static LayoutInflater inflater=null;


        public LazyAdapter(Activity a, ArrayList<HashMap<String, String>> d) {
            activity = a;
            data=d;
            inflater = (LayoutInflater)activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

        }

        public int getCount() {
            return data.size();
        }

        public Object getItem(int position) {
            return position;
        }

        public long getItemId(int position) {
            return position;
        }

        public View getView(int position, View convertView, ViewGroup parent) {
            View vi=convertView;
            if(convertView==null)
                vi = inflater.inflate(R.layout.activity_group_canvas, null);

            TextView canvasName = (TextView)vi.findViewById(R.id.canvasname); // id
            TextView canvasTitle = (TextView)vi.findViewById(R.id.canvastitle); // title
            ImageView canvasImage=(ImageView)vi.findViewById(R.id.canvasimage); // image

            HashMap<String, String> canvasList = new HashMap<String, String>();
            canvasList = data.get(position);


            canvasName.setText(canvasList.get(GroupCanvasActivity.mcanvasid));
            canvasTitle.setText(canvasList.get(GroupCanvasActivity.mcanvasname));
            canvasImage.setImageBitmap(convertByteArrayToBitmap(canvasList.get(GroupCanvasActivity.mcanvasimage)));
            return vi;
        }


        private Bitmap convertByteArrayToBitmap(String string){
            byte [] encodeByte= Base64.decode(string, Base64.DEFAULT);
            return BitmapFactory.decodeByteArray(encodeByte, 0, encodeByte.length);
        }

    }
公共类LazyAdapter扩展了BaseAdapter{
私人活动;
私有数组列表数据;
专用静态充气机=空;
公共LazyAdapter(活动a,ArrayList d){
活动=a;
数据=d;
充气器=(LayoutInflater)activity.getSystemService(Context.LAYOUT\u充气器\u SERVICE);
}
public int getCount(){
返回data.size();
}
公共对象getItem(int位置){
返回位置;
}
公共长getItemId(int位置){
返回位置;
}
公共视图getView(int位置、视图转换视图、视图组父视图){
视图vi=转换视图;
if(convertView==null)
vi=充气机。充气(R.layout.activity\u group\u canvas,空);
TextView canvasName=(TextView)vi.findViewById(R.id.canvasName);//id
TextView-CanvastTitle=(TextView)vi.findViewById(R.id.CanvastTitle);//标题
ImageView canvasImage=(ImageView)vi.findViewById(R.id.canvasImage);//图像
HashMap canvasList=新建HashMap();
canvasList=data.get(位置);
canvasName.setText(canvasList.get(GroupCanvasActivity.mcanvasid));
canvasTitle.setText(canvasList.get(GroupCanvasActivity.mcanvasname));
setImageBitmap(convertByteArrayToBitmap(canvasList.get(GroupCanvasActivity.mcanvasimage));
返回vi;
}
私有位图convertByteArrayToBitmap(字符串){
byte[]encodeByte=Base64.decode(字符串,Base64.DEFAULT);
返回BitmapFactory.decodeByteArray(encodeByte,0,encodeByte.length);
}
}
任何帮助都很好。谢谢。:-)

像这样做:

listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {

            @Override
            public void onItemClick(AdapterView<?> parent, View view,
                                    int position, long id) {
                String mcanvasid  = restCanvasList.get(position).get("mcanvasid"); // Here you get the mcanvasid

            }
        });
listView.setOnItemClickListener(新的AdapterView.OnItemClickListener(){
@凌驾
public void onItemClick(AdapterView父级、视图、,
内部位置,长id){
字符串mcanvasid=restCanvasList.get(position.get(“mcanvasid”);//这里是mcanvasid
}
});

试试这个。在适配器中:

    public Object getItem(int position) {
        return d.get(position);
    }
,在您的活动中:

    listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {

        @Override
        public void onItemClick(AdapterView<?> parent, View view,
                                int position, long id) {
            String output = (HashMap<String, String>)(parent.getAdapter.getItem(position)).get("mcanvasid");
            //do what you want with output
        }
    });
listView.setOnItemClickListener(新的AdapterView.OnItemClickListener(){
@凌驾
public void onItemClick(AdapterView父级、视图、,
内部位置,长id){
字符串输出=(HashMap)(parent.getAdapter.getItem(position)).get(“mcanvasid”);
//对输出执行您想要的操作
}
});

这东西的工作原理类似于restCanvasList.get(position.getMcanvasid()。对于您的代码,.get(“mcanvasid”),get是未知的。。但有一个小问题,我只是为了测试目的而将当前的canvasid设置在前端,我不打算将其保留在前端。您想从restCanvasList中获取mcanvasid吗?某种程度上,我想要一个被点击的…但我也不想在前端显示该id。不要向用户显示id,只需将其保存到其他位置,并在需要时使用它。你能告诉我如何实现这一点吗?