Я создал сложный вид, который состоит из трех видов, двух ImageButtons
и одного EditText. Я пытаюсь создать новую кнопку «MyView
» каждый раз щелкнув по кнопке. Во-первых, я решил установить onClick в xml, надеясь, что каждый раз, когда создается новый MyView, у него уже будет набор слушателей, но он, похоже, не работает. Итак, мой вопрос: как установить onClick-прослушиватель для кнопки внутри составного вида, а метод - в другом классе? Метод Я говорю о addViewBelow() в ViewControl
ВласOnClick прослушиватель для кнопки внутри составного вида
MyView.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content" >
<EditText
android:layout_width="0sp"
android:layout_height="wrap_content"
android:id="@+id/text"
android:layout_weight="80" />
<ImageButton
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_gravity="center"
android:layout_weight="10"
android:id="@+id/add"
android:onClick="addViewBelow"
android:clickable="true"
android:background="@drawable/add" />
<ImageButton
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_gravity="center"
android:layout_weight="10"
android:id="@+id/rmv"
android:background="@drawable/rmv" />
</LinearLayout>
MyView.java
public class MyView extends LinearLayout {
private EditText txt;
private ImageView add, rmv;
public MyView(Context context)
{
super(context);
LayoutInflater inflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
inflater.inflate(R.layout.myview, this);
txt = (EditText) findViewById(R.id.text);
add = (ImageView) findViewById(R.id.add);
rmv = (ImageView) findViewById(R.id.rmv);
}
public MyView(Context context, AttributeSet attrs) {
super(context, attrs);
LayoutInflater inflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
inflater.inflate(R.layout.myview, this);
txt = (EditText) findViewById(R.id.text);
add = (ImageView) findViewById(R.id.add);
rmv = (ImageView) findViewById(R.id.rmv);
}
ViewControl.java
public class ViewControl implements OnClickListener {
LinkedList<MyView> pathView;
Button mainButton;
RelativeLayout rl;
Activity act;
int lastId;
public ViewControl(Activity activity) {
act = activity;
//stuff
}
@Override
public void onClick(View v) {
//stuff
}
public void addViewBelow() {
RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(
LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT);
params.addRule(RelativeLayout.BELOW, lastId);
MyView mv = new MyView(act);
mv.setId(UniqueID.generateViewId());
mv.setLayoutParams(params);
lastId = mv.getId();
pathView.add(mv);
rl.addView(pathView.getLast());
}
}
Он работает, спасибо! Раньше я думал о чем-то подобном, но не был уверен, что это хорошая идея, поэтому я просто пропустил это. Я соглашусь с этим как можно скорее :) EDIT: И замечательно, что вы упомянули о том, что XML-часть, где метод должен быть только в контексте View, больше не тратить время на попытку сделать что-то, что невозможно. – user3086577