Android 弄错了身份证,McClick

Android 弄错了身份证,McClick,android,android-listview,onitemclick,Android,Android Listview,Onitemclick,我尝试将ListView与两个ImageVIe一起使用。第一个是一些照片,第二个是删除照片按钮 我尝试处理我单击的项目,但总是得到与两个ImageView不同的相同id。 我也尝试在适配器类中这样做,但发现这不是一个好的解决方案 也许你会说,我错在哪里 列表更新/init部分 public void updateList(final ArrayList<String> arrayList) { CustomList adapter = new

我尝试将ListView与两个ImageVIe一起使用。第一个是一些照片,第二个是删除照片按钮

我尝试处理我单击的项目,但总是得到与两个ImageView不同的相同id。 我也尝试在适配器类中这样做,但发现这不是一个好的解决方案

也许你会说,我错在哪里

列表更新/init部分

public void updateList(final ArrayList<String> arrayList) {
        CustomList adapter = new
                CustomList(FullInfoActivity.this, arrayList);
        HorizontalListView list = (HorizontalListView) findViewById(R.id.HorizontalListView);
        list.setAdapter(adapter);
        list.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view,
                                    int position, long id) {
               Log.e("Parent", String.valueOf(parent.getId()) +" " +R.id.img + " "+R.id.image_delete + " "+parent.getItemAtPosition(position));
                switch (parent.getId()) {
                    case R.id.img:
                        Toast.makeText(getApplicationContext(), "111111111", Toast.LENGTH_SHORT).show();
                        break;
                    case R.id.image_delete:
                        Toast.makeText(getApplicationContext(), "222222222", Toast.LENGTH_SHORT).show();
                        break;
                }
public void updateList(最终ArrayList ArrayList){
CustomList适配器=新建
CustomList(FullInfoActivity.this,arrayList);
HorizontalListView列表=(HorizontalListView)findViewById(R.id.HorizontalListView);
list.setAdapter(适配器);
list.setOnItemClickListener(新的AdapterView.OnItemClickListener(){
@凌驾
public void onItemClick(AdapterView父级、视图、,
内部位置,长id){
Log.e(“Parent”,String.valueOf(Parent.getId())+“”+R.id.img+“”+R.id.image\u delete+“”+Parent.getItemAtPosition(position));
开关(parent.getId()){
案例R.id.img:
Toast.makeText(getApplicationContext(),“111111111”,Toast.LENGTH_SHORT.show();
打破
案例R.id.image\u删除:
Toast.makeText(getApplicationContext(),“22222”,Toast.LENGTH_SHORT.show();
打破
}
列表视图项目

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    tools:context=".MainActivity" >
    <ImageView
        android:id="@+id/img"
        android:layout_width="75dp"
        android:layout_height="75dp"
        android:scaleType="centerCrop"
        android:visibility="invisible"
        android:layout_marginRight="8dp"
        android:clickable="true"
        android:layout_marginTop="8dp"
        android:layout_marginBottom="8dp"
        android:contentDescription="image" />

    <ProgressBar
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/progressBar"
        android:layout_centerVertical="true"
        android:layout_alignLeft="@+id/img"
        android:layout_alignStart="@+id/img"
        android:layout_alignRight="@+id/img"
        android:layout_alignEnd="@+id/img"
        android:visibility="visible" />

    <ImageView
        android:layout_width="20dp"
        android:layout_height="20dp"
        android:id="@+id/image_delete"
        android:src="@drawable/ic_action_cancel_light"
        android:layout_alignTop="@+id/img"
        android:layout_alignRight="@+id/img"
        android:layout_alignEnd="@+id/img"
        android:background="#7f989e9a"
        android:clickable="true"
        android:contentDescription="Cancel" />

</RelativeLayout>

自定义列表适配器

public class CustomList extends ArrayAdapter<String> {
    private final Activity context;
    private final ArrayList<String> arrayList;

    public CustomList(Activity context, ArrayList<String> arrayList) {
        super(context, R.layout.list_single, arrayList);
        this.context = context;
        this.arrayList = arrayList;
    }

    @Override
    public View getView(final int position, View view, ViewGroup parent) {
        LayoutInflater inflater = context.getLayoutInflater();
        View rowView = inflater.inflate(R.layout.list_single, null, true);

        final ImageView imageView = (ImageView) rowView.findViewById(R.id.img);
        final ProgressBar pb = (ProgressBar) rowView.findViewById(R.id.progressBar);
        final Animation show = AnimationUtils.loadAnimation(context, R.anim.appear_animation);
        ImageView delete = (ImageView) rowView.findViewById(R.id.image_delete);
            final Timer myTimer = new Timer(); // Создаем таймер
        myTimer.schedule(new TimerTask() { // Определяем задачу
                @Override
                public void run() {
                    File f = new File(arrayList.get(position));
                    if (f.exists()) {
                        final Bitmap myBitmap = BitmapFactory.decodeFile(f.getAbsolutePath());
                        if (myBitmap != null) {
                            myTimer.cancel();
                            context.runOnUiThread(new Runnable() {
                                @Override
                                public void run() {
                                    pb.setVisibility(View.GONE);
                                    imageView.setImageBitmap(Bitmap.createScaledBitmap(myBitmap, 120, 120, false));
                                    imageView.setVisibility(View.VISIBLE);
                                    imageView.startAnimation(show);
                                }
                            });
                        }
                    }
                }
            }, 100, 100);
        return rowView;
    }

}
公共类CustomList扩展了ArrayAdapter{
私人最终活动背景;
私有最终ArrayList ArrayList;
公共自定义列表(活动上下文,ArrayList ArrayList){
super(context,R.layout.list\u single,arrayList);
this.context=上下文;
this.arrayList=arrayList;
}
@凌驾
公共视图getView(最终整数位置、视图视图、视图组父视图){
LayoutInflater充气器=上下文。getLayoutInflater();
视图行视图=充气机。充气(R.layout.list_single,null,true);
final ImageView ImageView=(ImageView)rowView.findviewbyd(R.id.img);
final ProgressBar pb=(ProgressBar)rowView.findviewbyd(R.id.ProgressBar);
最终动画显示=AnimationUtils.loadAnimation(上下文,R.anim.appease\u动画);
ImageView delete=(ImageView)rowView.findViewById(R.id.image\u delete);
最终计时器myTimer=新计时器();//Сззаааааа
myTimer.schedule(新TimerTask(){//öППиззгггз)
@凌驾
公开募捐{
文件f=新文件(arrayList.get(position));
如果(f.exists()){
最终位图myBitmap=BitmapFactory.decodeFile(f.getAbsolutePath());
如果(myBitmap!=null){
myTimer.cancel();
runOnUiThread(新的Runnable(){
@凌驾
公开募捐{
pb.setVisibility(View.GONE);
setImageBitmap(位图.createScaledBitmap(myBitmap,120,120,false));
设置可见性(View.VISIBLE);
imageView.startAnimation(显示);
}
});
}
}
}
}, 100, 100);
返回行视图;
}
}
获取与两个ImageView不同的相同id

因为您得到了行id视图,并且它与它们的子视图不同。所以在
getView
中使用以下代码:

ImageView delete = (ImageView) rowView.findViewById(R.id.image_delete);
delete.setOnClickListener(new OnClickListener() {

    @Override
    public void onClick(View arg0) {
        // do your work
    }
});

您需要在
CustomList
中为这两个按钮设置onClick listener,因为只有在单击ListView行而不是从行中单击任何子视图时,
onItemClick
方法才会触发。示例作为说明,请重新使用对性能非常重要的视图。@ρѕρєK我不能,因为我不能更新ListView在我的活动中。或者我现在不知道如何做。使用setonclick listview,将无法滚动此字符串中的内容。valueOf(parent.getId())。我这样做了,但发现我无法调用活动中的方法updateList。为什么要调用该方法?整个ListView也不会变为dragable要更新ListView,您不需要再次创建适配器,只需更改适配器数据并调用
notifyDataSetChanged
,对于
dragable
,您必须问另一个问题因为我认为按钮可以防止触摸事件,但我确信它有解决方案,最后我认为必须采取我的方法。尝试将
android:genderantfocusability=“blocksDescendants”
添加到您的列表视图中,并将
android:focusability=“false”
添加到
imageView中