2017-02-25 43 views
0

所以我有四个按钮,理想情况下只有点击前一个按钮后才能点击。显然,如果您设置了onClick方法,即使android:setEnabled = falseandroid:setClickable = false我仍然可以点击它们。所以我从ImageView的XML中删除了onClick,现在我需要关于如何将它分配给每个后续ImageView的帮助。如何以编程方式将已创建的onClick方法设置为ImageView?

我的XML:

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:id="@+id/activity_main" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:paddingBottom="@dimen/activity_vertical_margin" 
    android:paddingLeft="@dimen/activity_horizontal_margin" 
    android:paddingRight="@dimen/activity_horizontal_margin" 
    android:paddingTop="@dimen/activity_vertical_margin" 
    tools:context=".MainActivity"> 

    <ImageView 
     android:layout_width="50dp" 
     android:layout_height="50dp" 
     android:layout_marginLeft="20dp" 
     android:id="@+id/sq2" 
     android:background="@color/postFocus" 
     android:onClick="imagePress" 
     android:layout_centerVertical="true" 
     android:nextFocusDown="@+id/sq3" 
     android:nextFocusUp="@+id/sq1" 
     android:nextFocusLeft="@+id/sq4" 
     android:nextFocusRight="@id/sq4"> 
     <requestFocus /> 
    </ImageView> 


    <ImageView 
     android:layout_width="50dp" 
     android:layout_height="50dp" 
     android:layout_marginLeft="250dp" 
     android:background="@color/preFocus" 
     android:id="@id/sq4" 
     android:clickable="false" 
     android:layout_centerVertical="true" 
     android:nextFocusDown="@id/sq3" 
     android:nextFocusUp="@id/sq1" 
     android:nextFocusLeft="@id/sq2" 
     android:nextFocusRight="@id/sq2" 
     /> 


    <ImageView 
     android:layout_width="50dp" 
     android:layout_height="50dp" 
     android:layout_marginTop="400dp" 
     android:background="@color/preFocus" 
     android:id="@id/sq3" 
     android:clickable="false" 
     android:layout_centerHorizontal="true" 
     android:nextFocusDown="@id/sq1" 
     android:nextFocusUp="@id/sq1" 
     android:nextFocusLeft="@id/sq2" 
     android:nextFocusRight="@id/sq4" 
     /> 

    <ImageView 
     android:layout_width="50dp" 
     android:layout_height="50dp" 
     android:layout_marginTop="50dp" 
     android:background="@color/preFocus" 
     android:id="@id/sq1" 
     android:clickable="false" 
     android:layout_centerHorizontal="true" 
     android:nextFocusDown="@id/sq3" 
     android:nextFocusUp="@id/sq3" 
     android:nextFocusLeft="@id/sq2" 
     android:nextFocusRight="@id/sq4"> 
    </ImageView> 

</RelativeLayout> 

MainActivity.java:

public class MainActivity extends AppCompatActivity { 

    public ArrayList<Integer> viewArray; 
    //public boolean flag; 


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

     viewArray = new ArrayList<Integer>(); 
     //flag = true; 

     RelativeLayout rl = (RelativeLayout) findViewById(R.id.activity_main); 
     final int childcount = rl.getChildCount(); 

     for (int i = 0; i < childcount; i++){ 

      viewArray.add(rl.getChildAt(i).getId()); 

     } 

    } 


    public void clickableChange(){ 

     RelativeLayout rl = (RelativeLayout) findViewById(R.id.activity_main); 
     final int childcount = rl.getChildCount(); 

     for (int i = 0; i < childcount - 1; i++){ 
      ImageView square = (ImageView) findViewById(viewArray.get(i)); 
      ImageView nextSquare = (ImageView) findViewById(viewArray.get(i+1)); 

      if (square.getDrawable() != null){ 
       nextSquare.setClickable(true); 
       //Code Here!!! 
       Toast.makeText(getApplicationContext(), square.getId() + "is now clickable!", Toast.LENGTH_LONG).show(); 
      } 
     } 
    } 

    public void imagePress(View test){ 
     int id = test.getId(); 
     ImageView picture = (ImageView) findViewById(id); 

     final int pictureId = id; 
//  final int nextId = viewArray.get(id + 1); 


     picture.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       ImageView empty = (ImageView) findViewById(pictureId); 

       if (empty.getDrawable() == null){ 

       PopupMenu popup = new PopupMenu(MainActivity.this, view); 
       popup.getMenuInflater().inflate(R.menu.popup_menu, popup.getMenu()); 


       popup.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() { 
        public boolean onMenuItemClick(MenuItem selection) { 
         ImageView thisThing = (ImageView) findViewById(pictureId); 
         Drawable icon = selection.getIcon(); 

         thisThing.setImageDrawable(icon); 
         clickableChange(); 
         return true; 
        } 
       }); 

       popup.show(); 
       } else { 
        Toast.makeText(getApplicationContext(),"Image is already set!",Toast.LENGTH_LONG).show(); 
       } 

      } 
     }); 
    } 
} 

如何设置一个已经创建的onClick方法的ImageView的programmically?

回答

0

你有没有尝试过这样的:

nextSquare.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View v) { 
     // call the method you want 
    } 
}); 
+0

我意识到这可能是一个小时我张贴了这个之后。它工作完美。但即使我自己排序,我仍然会给出答案。谢谢你的帮助! –

相关问题