Custom preferences screen with buttons

I created the following user settings screen. enter image description here

I want to add a listener on Button1 and Button2. How can I do it?

I use the following code to create the settings screen above.

DemoPref:

import android.app.Activity; import android.content.Intent; import android.os.Bundle; public class DemoPref extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); startActivity(new Intent(this, MyPref.class)); } } 

MyPref:

 import android.os.Bundle; import android.preference.PreferenceActivity; import android.util.Log; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; public class MyPref extends PreferenceActivity{ @Override public void onCreate(Bundle icicle) { super.onCreate(icicle); //setContentView(R.layout.tftp_setting); this.addPreferencesFromResource(R.xml.list_pref); /*Button b1 = (Button)findViewById(R.id.button1); b1.setOnClickListener(new OnClickListener(){ @Override public void onClick(View v) { Log.i("MyPref", "Button1 one is clicked."); } }); Button b2 = (Button)findViewById(R.id.button2); b2.setOnClickListener(new OnClickListener(){ @Override public void onClick(View v) { Log.i("MyPref", "Button2 one is clicked."); } });*/ } } 

Res \ location \ setting.xml:

 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="horizontal"> <TextView android:text="TextView1" android:id="@+id/textView1" android:layout_width="wrap_content" android:layout_height="wrap_content"></TextView> <EditText android:text="EditText2" android:id="@+id/editText1" android:layout_width="wrap_content" android:layout_height="wrap_content"></EditText> </LinearLayout> <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="horizontal"> <TextView android:text="TextView2" android:id="@+id/textView2" android:layout_width="wrap_content" android:layout_height="wrap_content"></TextView> <EditText android:text="EditText2" android:id="@+id/editText2" android:layout_height="wrap_content" android:layout_width="wrap_content"></EditText> </LinearLayout> <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="horizontal"> <Button android:text="Button1" android:id="@+id/button1" android:layout_width="wrap_content" android:layout_height="wrap_content"></Button> <Button android:text="Button2" android:id="@+id/button2" android:layout_width="wrap_content" android:layout_height="wrap_content"></Button> </LinearLayout> </LinearLayout> 

Res \ XML \ pref.xml:

 <?xml version="1.0" encoding="utf-8"?> <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"> <PreferenceScreen android:title="My Setting" android:layout="@layout/setting" android:summary="This is my setting."></PreferenceScreen> </PreferenceScreen> 
+4
source share
3 answers

You need:

 Button b1 = (Button) findViewById(R.id.button1); Button b2 = (Button) findViewById(R.id.button2); b1.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { Log.i("MyPref", "Button1 one is clicked."); } }); b2.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { Log.i("MyPref", "Button2 one is clicked."); } }); 
+1
source

I have no answer, but I have an understanding -

The view in which you are trying to find the buttons is NOT settings.xml (or pref.xml) - so findViewById returns null.

I think the loaded view (layout) is an internal representation of the Android OS, with ID 17367111 (or 0x1090047).

The only preference you have on the PreferenceScreen screen that you open is another PreferenceScreen (which uses the settings.xml parameter as a layout)

you need to access a representation of this internal PreferenceScreen and them you could do:

 prefScreeView.findViewByID(R.id.button1); 

Hope this helps someone find the answer.

0
source

Btn = button (button) getPreferenceScreen (). findPreference (key);

-one
source

All Articles