我正在实现一个在listview中使用的自定义适配器。我正在使用一些文本消息和我的一个类对象填充listview。每个列表项中都有一个图像视图,点击该图像视图后,我将显示一个包含对象信息的视图,点击列表视图项目,我将显示一个不同的视图。我能够实现这一点,但问题是当我点击imageview时,打开的视图包含一些其他列表项对象的信息,而不是单击图像视图的列表项中包含的对象。我试过一个为此得到一个解决方案,但没有得到一个。所以我提出这个问题。请帮助我。
这是我的自定义适配器getView()方法的实现 -
List<Map<String, Object>> data = getTasksData(tasks);
SimpleAdapter simpleAdapter = new SimpleAdapter(this, data,
R.layout.list_item_detail_layout, new String[] { "itemstatus","itemname", "itemdesc"}, new int[] {R.id.taskPercentage, R.id.taskname, R.id.taskdesc}){
@Override
public View getView(int position, View convertView, ViewGroup parent){
if (convertView == null) {
LayoutInflater inflater = getLayoutInflater();
convertView = inflater.inflate(R.layout.list_item_detail_layout, null, false)
}
@SuppressWarnings("unchecked")
//map object used to populate each list item
Map<String, Object> listItem = (Map<String, Object>)
listView.getItemAtPosition(position);
//object whose information is to be displayed in the view
Task task = (Task)listItem.get("item");
if(task != null){
activeTask = task;
}
//text views to be displayed in each list item
TextView taskpercentage = (TextView)convertView.findViewById(R.id.taskPercentage);
taskpercentage.setText((String)listItem.get("itemstatus"));
TextView taskname = (TextView)convertView.findViewById(R.id.taskname);
taskname.setText((String)listItem.get("itemname"));
TextView taskDescription = (TextView)convertView.findViewById(R.id.taskdesc);
taskDescription.setText((String)listItem.get("itemdesc"));
//imageview whose click listener has been set to navigate to a view
ImageView taskEdit = (ImageView)convertView.findViewById(R.id.task_edit);
taskEdit.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
//method called when image icon on the list view is clicked
newTask(v, false);
}
});
return convertView;
}
};
//单击列表视图中的图像图标时调用的方法
newTask(v,false)代码 -
private void newTask(final View view, final boolean isNew) {
setContentView(R.layout.task_view);
final EditText taskName = (EditText) this
.findViewById(R.id.task_name_edtxt);
if (isNew == false) {
taskName.setText(activeTask.getName());
}
}
3.ListView实施 -
listView = ((ListView)this.findViewById(R.id.listTaskView));
listView.setAdapter(simpleAdapter);
listView.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
Task task = null;
@SuppressWarnings("unchecked")
Map<String, Object> listItem = (Map<String, Object>) listView
.getItemAtPosition(position);
task = (Task) listItem.get("item");
if (task != null) {
activeTask = task;
//method called when listview item is clicked
showActivityListView(view);
}
}
}
});
用作列表视图项目的布局文件 -
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal" >
<TextView
android:id="@+id/taskPercentage"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="8dp"
android:textAppearance="?android:attr/textAppearanceLarge"
android:textColor="@color/blue_shade"
android:textSize="20sp"
android:textStyle="bold" >
</TextView>
<LinearLayout
android:layout_width="0px"
android:layout_height="wrap_content"
android:layout_marginBottom="5dp"
android:layout_marginTop="5dp"
android:layout_weight="1"
android:orientation="vertical"
android:paddingLeft="0px"
android:paddingRight="5dp" >
<RelativeLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content" >
<TextView
android:id="@+id/taskname"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:textColor="#FFF38585"
android:textSize="15sp" >
</TextView>
<ImageView
android:id="@+id/edit_task"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:src="@drawable/edit_form"/>
</RelativeLayout>
<TextView
android:id="@+id/taskdesc"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="4dp"
android:textColor="#FF2CE4A4"
android:textSize="13sp" >
</TextView>
</LinearLayout>
</LinearLayout>
这是实现参考。如果有人能告诉我问题是什么或者如何使这个功能正常工作,请帮帮我。谢谢。
答案 0 :(得分:1)
尝试:
final ImageView taskEdit = (ImageView)convertView.findViewById(R.id.task_edit);
taskEdit.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
newTask(taskEdit, false);
}
});
return convertView;
}
答案 1 :(得分:0)
从MainActivity
或Fragment
,您应该初始化ListView
并设置其适配器。您还应在其中设置onItemClickListener
(MainActivity
)。然后从列表中获取给定object
参数中的position
并根据它执行您的操作。
示例:强>
ListView listViewItems = new ListView(this);
listViewItems.setAdapter(adapter);
listViewItems.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
Toast.makeText(getApplicationContext(),
"Click ListItem Number " + position, Toast.LENGTH_LONG)
.show();
}
});
您可以创建自己的Object
课程并将其传递到列表中,然后检查项目位置并执行操作。
我希望它有所帮助