2017-06-21 34 views
0

我试图用很长时间将OnTouchListener设置为使用ArrayLists的多个ImageViews,但是我的应用程序一直在进行细化。这是我的代码:尝试使用ArrayList将OnTouchListener设置为多个ImageViews

MainActivity:

public class MainActivity extends AppCompatActivity { 

private DragAndDrop dragAndDrop; 
private InstantiateImages instantiateImages; 

private ArrayList<ImageView> faces = new ArrayList<ImageView>(); 

private int i; 


@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    dragAndDrop = new DragAndDrop(); 
    InstantiateImages instantiateImages = new InstantiateImages(this); 

    //Add elements to ArrayLists: 
    instantiateImages.Add(); 

    //Get elements into ArrayLists: 
    faces = instantiateImages.getFaces(); 

    for (i = 0; i< faces.size(); i++) { 

     faces.get(i).setOnTouchListener(new View.OnTouchListener() { 
      @Override 
       public boolean onTouch(View v, MotionEvent event) { 

        //Follow the touch on the ImageView and move the 
        //ImageView accordingly: 
        dragAndDrop.action(v, event, faces.get(i)); 

        return true; 
       } 
      }); 
    } 

} 
} 

InstantiateImages类:

public class InstantiateImages { 

this.activity = activity; 

private ArrayList<ImageView> faces = new ArrayList<ImageView>(); 

//Faces declarations: 
private ImageView FacesNoFace; 

InstantiateEmojis() { 


    //Faces instantiations: 
    FacesNoFace = (ImageView)this.activity.findViewById(R.id.faces_no_face); 

} 

public void Add() { 
    //Add faces to ArrayList faces: 
    faces.add(FacesNoFace); 
} 


//Getters: 
//Get Faces: 
public ArrayList<ImageView> getFaces() { 
    return faces; 
} 
} 

布局的XML:

<?xml version="1.0" encoding="utf-8"?> 
<android.support.constraint.ConstraintLayout 
xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:app="http://schemas.android.com/apk/res-auto" 
xmlns:tools="http://schemas.android.com/tools" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
tools:context="myproject.myproject.MainActivity" 
tools:layout_editor_absoluteY="81dp" 
tools:layout_editor_absoluteX="0dp" 
tools:background="#ffffff"> 

<ImageView 
    android:id="@+id/faces_no_face" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_marginStart="16dp" 
    android:contentDescription="" 
    app:srcCompat="@drawable/faces_no_face" 
    tools:ignore="ContentDescription" 
    tools:layout_editor_absoluteX="16dp" 
    tools:layout_editor_absoluteY="16dp" /> 

</android.support.constraint.ConstraintLayout> 

DragAndDrop类是一个只有在ImageView拖放(OnTouchListener的内部/内部)之后且在我试图将ImageView放入ArrayList“faces”之前的方法的类,该类在“InstantiateImages “我只在一个ImageView(我现在添加到ArrayList的那个ImageView)上声明OnTouchListener,它工作得很好(我可以在应用程序屏幕上拖放ImageView)。现在应用程序崩溃后,我运行它,它说:“MyProject保持停止关闭应用程序”或“MyProject已停止重新打开应用程序”。

任何帮助将不胜感激!

+1

这里有很多错误。我认为通过学习一些Java和Android平台的基础知识可以为您提供最好的服务。 –

+0

@詹姆斯麦克拉肯首先坦克你的诚实!其次,我正在学习和阅读Android和Have的基础知识,之后我每天都会在这个项目上工作很多小时。我会接受你的建议,但是你能否帮我修理我的代码?我急切地寻求帮助,找不到答案。 – Michael

+0

你能为你的布局包含xml吗? 1)格式不好。 2)Java使用camelCase而不是变量名称snake_case 2)'InstantiateImages'从'MainActivity'继承,使其成为'Activity'。然后'MainActivity'持有一个InstantiateImages'实例吗?这部分对我来说毫无意义。 4)face只会有1个ImageView(faces_no_face),我很确定'InstantiateImages'根本就不像你想象的那样工作。 –

回答

0

我认为你是这个过于复杂的部分。我认为这会做你想做的事情。

public class MainActivity extends AppCompatActivity { 

    private DragAndDrop dragAndDrop; 
    private final ArrayList<ImageView> faces = new ArrayList<>(); 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     dragAndDrop = new DragAndDrop(); 
     faces.add((ImageView) findViewById(R.id.faces_no_face)); 
     for (ImageView face : faces) { 
      face.setOnTouchListener(new View.OnTouchListener() { 
       @Override 
       public boolean onTouch(View v, MotionEvent event) { 
        //Follow the touch on the ImageView and move the 
        //ImageView accordingly: 
        dragAndDrop.action(v, event, (ImageView) v); 
        return false; 
       } 
      }); 
     } 
    } 
} 

如果您在具有可变数量的,你要听点击了ImageView计划办,你可能想看看RecyclerView和列表。

相关问题