gpt4 book ai didi

java - ListView 中的按钮每个项目布局

转载 作者:行者123 更新时间:2023-12-01 13:38:33 24 4
gpt4 key购买 nike

我有一个 ListView ,我正在从自定义对象的 ArrayList 填充该 ListView 。这是自定义适配器代码。

    @Override
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
final int a=position;


FileHolder holder=null;
View row = convertView;
if(row==null)
{
LayoutInflater inflater = ((Activity)context).getLayoutInflater();
row = inflater.inflate(textViewResourceId, parent, false);
holder=new FileHolder();

holder.file=files.get(position);
holder.deleteButton=(ImageButton) row.findViewById(R.id.deleteButton);
holder.downloadButton=(ImageButton) row.findViewById(R.id.downloadButton);

holder.deleteButton.setTag(holder.file);
holder.downloadButton.setTag(holder.file);


holder.fileName= (TextView) row.findViewById(R.id.fileName);



holder.fileName.setText(holder.file.getFileName());

}
else
{
holder=(FileHolder) row.getTag();
}
fPOJO=holder.file;
final AsyncCall call=new AsyncCall();

holder.downloadButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
MODE=0;
//call.execute(MODE);

}
});

holder.deleteButton.setOnClickListener(new View.OnClickListener() {

@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Toast.makeText(getContext(), "Delete File "+(String.valueOf(a))+" "+fPOJO.getFileName(), Toast.LENGTH_LONG).show();
MODE=1;
//call.execute(MODE);

}
});


return row;
}

public static class FileHolder{
FilesPOJO file;
TextView fileName;
ImageButton downloadButton;
ImageButton deleteButton;
}

有两个按钮,一个用于文件删除,另一个用于文件下载。我已经为这两个按钮实现了点击监听器。问题是,当我单击任何按钮时,Toast 消息中的文件名与我在屏幕显示上看到的文件名不同。例如:我有 5 个文件,其名称为

delete.png
upload.png
share.png
referesh.png
copy.png

现在,当我单击与referesh.png文件对应的删除按钮时,会弹出toast,并且文件名与referesh.png不同。

如何解决此问题。

编辑:

这就是我设置此适配器的方式

             FilesAdapter adapter=new FilesAdapter(rootView.getContext(), R.layout.file_list_view_item_row, Application.files);
View header = (View) View.inflate(rootView.getContext(), R.layout.files_list_view_header_row, null);
fileListHeading.inflate(rootView.getContext(), R.layout.files_list_view_header_row, null);
filesListView.addHeaderView(header);
filesListView.setAdapter(adapter);

最佳答案

我认为问题在于您的 fPOJO 变量,当调用 onClick 时,它可能具有不同的值,因为在每次 getView 之后您都会更改它的值。

@Override
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
final int a=position;


final FileHolder holder;
View row = convertView;
if(row==null)
{
LayoutInflater inflater = ((Activity)context).getLayoutInflater();
row = inflater.inflate(textViewResourceId, parent, false);
holder=new FileHolder();

holder.file=files.get(position);
holder.deleteButton=(ImageButton) row.findViewById(R.id.deleteButton);
holder.downloadButton=(ImageButton) row.findViewById(R.id.downloadButton);

holder.deleteButton.setTag(holder.file);
holder.downloadButton.setTag(holder.file);


holder.fileName= (TextView) row.findViewById(R.id.fileName);



holder.fileName.setText(holder.file.getFileName());

}
else
{
holder=(FileHolder) row.getTag();
}

final AsyncCall call=new AsyncCall();

holder.downloadButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
MODE=0;
//call.execute(MODE);

}
});

holder.deleteButton.setOnClickListener(new View.OnClickListener() {

@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Toast.makeText(getContext(), "Delete File "+(String.valueOf(a))+" "+holder.fileName, Toast.LENGTH_LONG).show();
MODE=1;
//call.execute(MODE);

}
});


return row;
}

只需将holder定为最终版本并从中获取文件名即可。

关于java - ListView 中的按钮每个项目布局,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21046646/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com