Android 弄错了身份证,McClick
我尝试将ListView与两个ImageVIe一起使用。第一个是一些照片,第二个是删除照片按钮 我尝试处理我单击的项目,但总是得到与两个ImageView不同的相同id。 我也尝试在适配器类中这样做,但发现这不是一个好的解决方案 也许你会说,我错在哪里 列表更新/init部分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
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中