gpt4 book ai didi

android - 如何从 ListView 中提取对象 - getItemAtPosition 不起作用

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:25:23 25 4
gpt4 key购买 nike

我为我的 ListView 实现了一个自定义适配器。如何从特定列表项中提取对象。这是我的自定义适配器的外观:

MyCustomAdapter.java

public class MyCustomAdapter extends ArrayAdapter<DashboardBean> {


Context context;
int layoutResourceId;
DashboardBean currentMRB;
Vector<DashboardBean> data;

public MyCustomAdapter(Context context, int layoutResourceId, Vector<DashboardBean> data)
{
super(context,layoutResourceId,data);
this.layoutResourceId = layoutResourceId;
this.context=context;
this.data = data;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {

View row = convertView;
MyStringReaderHolder holder;

if(row==null)
{
LayoutInflater inflater = ((Activity)context).getLayoutInflater();
row = inflater.inflate(layoutResourceId, parent,false);

holder= new MyStringReaderHolder();

holder.project = (TextView)row.findViewById(R.id.project);
holder.workRequest = (TextView)row.findViewById(R.id.work_request);
holder.startDate = (TextView)row.findViewById(R.id.start_date);
holder.status = (TextView) row.findViewById(R.id.status);

row.setTag(holder);
}
else
{
holder=(MyStringReaderHolder) row.getTag();
}

DashboardBean mrb =data.elementAt(position);
System.out.println("Position="+position);

holder.project.setText(mrb.project);
holder.workRequest.setText(mrb.workRequest);
holder.startDate.setText(mrb.startDate);
holder.status.setText(mrb.status);
return row;
}





static class MyStringReaderHolder {
TextView project, workRequest, startDate, status;

}
}

这是 DashboardBean.java

 public class DashboardBean {

public String project;
public String workRequest;
public String startDate;
public String status;

public DashboardBean(String project,String workRequest,String startDate,String status)
{
this.project = project;
this.workRequest = workRequest;
this.startDate = startDate;
this.status = status;
}
}

这是我调用 onClickListener() 的 java fragment :

mListView.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> myAdapter, View myView,
int myItemInt, long mylng) {
TableRow tableRow = (TableRow) (mListView.getItemAtPosition(myItemInt));

String project = ((TextView) tableRow.findViewById(R.id.project)).getText().toString();
String workRequest = ((TextView) tableRow.findViewById(R.id.work_request)).getText().toString();
String startDate = ((TextView) tableRow.findViewById(R.id.start_date)).getText().toString();
String status = ((TextView) tableRow.findViewById(R.id.status)).getText().toString();

showWorkRequest(project, workRequest, startDate, status);

}

});

和 xml 代码:

<?xml version="1.0" encoding="utf-8"?>
<TableRow xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/tabRow1"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
style="@style/BodyRow"
android:gravity="center_horizontal" >

<RelativeLayout
android:id="@+id/relativeLayout1"
android:layout_width="fill_parent"
android:layout_height="fill_parent"

android:gravity="center_horizontal" >

<TextView
android:id="@+id/status"
android:layout_width="wrap_content"
style="@style/BodyText"
android:layout_height="wrap_content"

android:layout_alignParentRight="true"
android:textColor="@color/textColor"
android:text="TextView" />

<TextView
android:id="@+id/start_date"
style="@style/HourText"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:text="TextView" android:textColor="@color/textColor" android:textSize="10sp"/>

<TextView
android:id="@+id/project"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_toRightOf="@+id/start_date"
android:gravity="center_horizontal"
style="@style/LeftHeaderText"
android:text="TextView" android:layout_marginLeft="5dp"
android:textColor="@color/textColor" android:textStyle="bold"/>

<TextView
android:id="@+id/work_request"
android:layout_width="wrap_content"
style="@style/BodyText"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/project"
android:layout_below="@+id/project"
android:text="TextView"
android:textColor="@color/textColor" />

</RelativeLayout>
</TableRow>

我想我不能像通常使用的那样使用 onClickListener,因为我是 extendind 自定义适配器。在那种情况下,他们可能有问题

public void onItemClick(AdapterView<?> myAdapter, View myView, 
int myItemInt, long mylng)

但日志显示:DashboardBean 出现 ClassCastException。

无论如何,我无法修复它。谁能帮忙?

最佳答案

ClassCastException 是由 OnItemClickListener 中的以下行引起的:

TableRow tableRow = (TableRow) (mListView.getItemAtPosition(myItemInt));

那是因为您的适配器充满了 DashboardBean 实例。 getItemAtPosition 方法返回属于适配器使用的数据结构的对象,不是图形小部件的实例(TableRow,我假设)对象显示在哪个上。只是写:

DashboardBean board = (DashboardBean) (mListView.getItemAtPosition(myItemInt));

代替有问题的行就可以了。然后,您可以直接使用 DashboardBean 对象中的字段,而不是通过 TextView 和类似的 UI 元素。

关于android - 如何从 ListView 中提取对象 - getItemAtPosition 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11164543/

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