我有一个LinearLayout,它包含几个子ImageView(动态添加ImageViews到LinearLayout水平)。在长按子视图(ImageView)时如何获取该LinerLayout的子视图的位置?
添加了setTag:
image.setImageBitmap(resizedBitmap);
image.setTag(fullUrl);
imageViewLinearLayout.setOnLongClickListener(new View.OnLongClickListener(){
@Override
public boolean onLongClick(View v) {
Log.d("Mobi","Path :"+v.getTag());
return false;
}
});
添加了Tag作为文件路径,但将v.getTag()返回为null"?
答案 0 :(得分:2)
添加此test.xml
<?xml version="1.0" encoding="utf-8"?>
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content" >
<Button
android:id="@+id/btnAddImage"
style="?android:attr/buttonStyleSmall"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Add Image" />
<HorizontalScrollView
android:layout_width="fill_parent"
android:layout_height="0dp"
android:layout_weight="1.5"
android:fadingEdge="none"
android:orientation="horizontal" >
<LinearLayout
android:id="@+id/lnrParent"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal" >
</LinearLayout>
</HorizontalScrollView>
</TableLayout>
和另一个布局lay_image.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/lnrChild"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal" >
<Button
android:id="@+id/btnExample"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Button" />
<ImageView
android:id="@+id/imgView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="50sp"
android:src="@drawable/ic_launcher" />
</LinearLayout>
并且在这里编码
setContentView(R.layout.test);
final LinearLayout LnrLayout = (LinearLayout) findViewById(R.id.lnrParent);
Button BtnAddImage = (Button) findViewById(R.id.btnAddImage);
BtnAddImage.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
final LinearLayout LnrChildLayout = (LinearLayout) getLayoutInflater()
.inflate(R.layout.lay_image, null);
LnrChildLayout.setLayoutParams(new LayoutParams(
ViewGroup.LayoutParams.MATCH_PARENT,
ViewGroup.LayoutParams.WRAP_CONTENT));
LnrLayout.addView(LnrChildLayout);
int indexValue = LnrLayout.indexOfChild(LnrChildLayout);
LnrChildLayout.setTag(Integer.toString(indexValue));
final ImageView ImgView = (ImageView) LnrChildLayout
.findViewById(R.id.imgView);
int ImagePosition = LnrChildLayout.indexOfChild(ImgView);
ImgView.setTag(Integer.toString(ImagePosition));
ImgView.setOnLongClickListener(new OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
// get Position
String strPosition = (String) v.getTag();
Toast.makeText(test.this,
"ImageView getTag : >" + strPosition,
Toast.LENGTH_SHORT).show();
// getId
int strId = v.getId();
Toast.makeText(test.this,
"ImageView getId : >" + strId,
Toast.LENGTH_SHORT).show();
return true;
}
});
LnrChildLayout
.setOnLongClickListener(new OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
String strPosition = (String) v.getTag();
Toast.makeText(test.this, "" + strPosition,
Toast.LENGTH_SHORT).show();
return true;
}
});
Button BtnExample = (Button) LnrChildLayout
.findViewById(R.id.btnExample);
int ButtonPosition = LnrChildLayout.indexOfChild(BtnExample);
BtnExample.setTag(Integer.toString(ButtonPosition));
BtnExample.setOnLongClickListener(new OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
String strPosition = (String) v.getTag();
Toast.makeText(test.this,
"Button getTag : >" + strPosition,
Toast.LENGTH_SHORT).show();
int strId = v.getId();
Toast.makeText(test.this, "Button getId : >" + strId,
Toast.LENGTH_SHORT).show();
return true;
}
});
}
});
答案 1 :(得分:1)
您可以使用ViewGroup的indexOfChild方法。
我构建了一个小片段来检查你的用例(类似)。我有三个按钮动态添加到LinearLayout,然后clickHandler附加到按钮。你可以使它具有通用性,使它真正有用。
// Other code
final LinearLayout layout = (LinearLayout) findViewById(R.id.layout);
final Button button = new Button(getApplicationContext());
button.setText("Test");
final Button button2 = new Button(getApplicationContext());
button2.setText("Test2");
final Button button3 = new Button(getApplicationContext());
button3.setText("Test3");
layout.addView(button);
layout.addView(button2);
layout.addView(button3);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
getIndex(layout, button);
}
});
// Other code
在方法getIndex中,这是代码:
private int getIndex(LinearLayout view, View childView) {
Log.d("ViewIndex", "View index is" + view.indexOfChild(childView));
return view.indexOfChild(childView);
}
答案 2 :(得分:1)
您可以使用imageView.setTag(position)命令设置imageView位置,并在长按时获取它作为position =(整数)imageView.getTag()。
答案 3 :(得分:0)
动态地在视图上添加b
,然后在听众界面内使用Long press listener
和/或View.getLocationOnScreen()
。
答案 4 :(得分:0)
试试这个
list.setOnLongItemClickListener(new OnItemClickListener() {
@Override
public void onLongItemClick(AdapterView<?> arg0, View viewRow, int pos,
long arg3) {
int wantedPosition = pos; // Whatever position you're looking for
int firstPosition = list.getFirstVisiblePosition() - list.getHeaderViewsCount(); // This is the same as child #0
int wantedChild = wantedPosition - firstPosition;
////////////////the wantedChild value , is your position
}
});