0
所以我有四个按钮,理想情况下只有点击前一个按钮后才能点击。显然,如果您设置了onClick方法,即使android:setEnabled = false
和android: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?
我意识到这可能是一个小时我张贴了这个之后。它工作完美。但即使我自己排序,我仍然会给出答案。谢谢你的帮助! –