Wenn eine benutzerdefinierte Komponente für Android zu machen, soweit ich verstanden, ich brauche:hinzufügen setOnClickListener auf Android benutzerdefinierte Komponente
- eine XML-Datei mit dem Layout für die Komponente;
- eine Java-Klasse.
Versucht, einen zu machen, nur für die Praxis. Verwenden Sie zwei Fortschrittsbalken und eine Schaltfläche in der XML, und erstellen Sie die Klasse, als in meiner Haupttätigkeit ausprobiert, hat gut funktioniert.
Aber jetzt locke ich, wie OnClickListener auf meiner Schaltfläche durch die Aktivität festgelegt, und in diesem Teil bin ich verloren.
Mein loading_button.xml:
<merge
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<RelativeLayout
android:orientation="vertical"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<ProgressBar
style="?android:attr/progressBarStyleHorizontal"
android:layout_width="match_parent"
android:layout_height="4dp"
android:progress="0"
android:id="@+id/pg_top" />
<Button
android:text="Button"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/btn_ok"
android:background="@color/colorPrimary"
android:textColor="#ffffff"
android:layout_below="@+id/pg_top"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true" />
<ProgressBar
style="?android:attr/progressBarStyleHorizontal"
android:layout_width="match_parent"
android:layout_height="5dp"
android:progress="0"
android:id="@+id/pg_bottom"
android:layout_below="@+id/btn_ok"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true" />
</RelativeLayout>
</merge>
Hier die LoadingButton.java:
public class LoadingButton extends RelativeLayout{
private ProgressBar pbTop;
private ProgressBar pbBottom;
private Button btnOk;
private int pbTopProgress = 0;
private int pbBottomProgress = 0;
public LoadingButton(Context context, AttributeSet attrs) {
super(context, attrs);
View view = View.inflate(context, R.layout.loading_button, this);
btnOk = (Button) view.findViewById(R.id.btn_ok);
pbTop = (ProgressBar) view.findViewById(R.id.pg_top);
pbBottom = (ProgressBar) view.findViewById(R.id.pg_bottom);
btnOk.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// Doing stuff ok
}
});
}// LoadingButton
}
Die setOnClickListener in der Klasse funktioniert, aber wie kann ich es aus meiner Haupttätigkeit eingestellt?
MainActivity:
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// My new component (it's id in activity_main.xml is 'lb')
LoadingButton lb = (LoadingButton) findViewById(R.id.lb);
// QUESTION - how to make something like this with btnOk:
lb.btnOkSetOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// Do stuff
}
});
}
}
Wenn dies möglich ist, wie?
Falls nicht, was ist der richtige Ansatz, um eine benutzerdefinierte Komponente zu erstellen und clickListeners auf ein bestimmtes Element dieser Komponente zu setzen?
Genau was ich wollte! Vielen Dank. Aber du hast einen kleinen Fehler in setOnLoadingClickListener, sollte sein: public void setOnLoadingClickListener (OnLoadingButtonClickListener onLoadingClickListener) { mONOnLoadingButtonClickListener = onLoadingClickListener; } Nur Renema den zweiten mONOnLoadingButtonClickListener zu onLoadingClickListener und ich werde als die Antwort markieren ^^ –
OK, danke zu finden mein Mistak – USKMobility