2011-12-28 11 views
4

「新しいコードを開始しています」以降のコードが機能しない理由を教えてもらえますか? クリックイベントリスナーのonClickメソッドが呼び出されず、ラベルのテキストの変更さえ行われません。Androidボタンがクリックできない

ログには、ボタンのIDが表示されます。ボタンとラベルはTableLayoutにあり、LinearLayoutの内部にあります。

ボタンをバインドするonCreateメソッドです。私は実際のところ、私が追加、header一部を除去しようとした

<TableLayout 
    android:id="@+id/headerLayout" 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:stretchColumns="1" > 

    <TableRow> 

     <ImageButton 
      android:id="@+id/btnSettings" 
      android:gravity="left" 
      android:padding="3dip" 
      android:src="@drawable/ic_menu_add" 
      android:hint="@string/label_settings" /> 

     <TextView 
      android:id="@+id/headerText" 
      android:gravity="center" 
      android:padding="3dip" 
      android:text="Blank" 
      android:height="50dip"/> 

     <ImageButton 
      android:id="@+id/btnAdd" 
      android:background="@drawable/disconnectbutton" 
      android:gravity="right" 
      android:padding="3dip" 
      android:src="@drawable/ic_menu_add" 
      android:hint="@string/label_add" /> 

    </TableRow> 

</TableLayout> 

<ListView 
    android:id="@+id/contactList" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:layout_alignParentLeft="true" 
    android:background="@color/transparent" 
    android:cacheColorHint="#00000000" > 
</ListView> 

UPDATE

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    setContentView(R.layout.contact_list); 

    setDefaultKeyMode(DEFAULT_KEYS_SHORTCUT); 

    mContactList = (ListView) findViewById(R.id.contactList); 
    mInputManager = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); 
    mApplicationData = (GlobalApplicationData) getApplication(); 

    setTitle(mApplicationData.getAppTitle()); 
    mSettings = mApplicationData.getSettings(); 
    initializedEncryptionKey(); 

    mContactsDB = mApplicationData.getContactsDB(); 

    mXmppModalUI = new XmppModalUI(mInputManager); 
    mXmppModalUI.initializeModalUI(this, mSettings, this); 

    mApplicationData.getPersistentXMPP().setModalUI(mXmppModalUI); 
    mApplicationData.getPersistentXMPP().setContactListCallback(this); 

    mApprater = new Appirater(this, mSettings); 

    if (mApplicationData.getUpdateChecker() == null && mApplicationData.getUpdateCheckerUrl() != null) { 
     mApplicationData.setUpdateChecker(new UpdateChecker(getApplicationContext(), mApplicationData.getUpdateCheckerUrl())); 
    } 

    //starting new code 
    Toast.makeText(getApplicationContext(), "Starting Ali's Code", Toast.LENGTH_SHORT).show(); 

    TableLayout header = (TableLayout) findViewById(R.id.headerLayout); 
    Log.d("TableLayout",((header == null)?"NOT FOUND":"FOUND "+header.getId())); 

    final TextView labelHeader = (TextView) header.findViewById(R.id.headerText); 
    labelHeader.setText("Jump"); 

    final ImageButton btnSettings = (ImageButton) header.findViewById(R.id.btnSettings); 
    btnSettings.setClickable(true); 
    Log.d("Settings Button",((btnSettings == null)?"NOT FOUND":"FOUND "+btnSettings.getId())); 
    btnSettings.setOnClickListener(new View.OnClickListener() 
    { 
     public void onClick(View v) 
     { 
      Log.d("OnClick","Here"); 
      // Perform action on clicks 
      Toast.makeText(getApplicationContext(), "Settings", Toast.LENGTH_SHORT).show(); 
      startGlobalSettings(); 
     } 
    }); 

    final ImageButton btnAdd = (ImageButton) header.findViewById(R.id.btnAdd); 
    btnAdd.setClickable(true); 
    Log.d("Add Button",((btnAdd == null)?"NOT FOUND":"FOUND "+btnAdd.getId())); 
    btnAdd.setOnClickListener(new View.OnClickListener() 
    { 
     public void onClick(View v) 
     { 
      Log.d("OnClick","Here"); 
      // Perform action on clicks 
      Toast.makeText(getApplicationContext(), "ADD", Toast.LENGTH_SHORT).show(); 
      showDialog(DialogIds.ADD_CONTACT); 
     } 
    }); 

} 

レイアウト(contact_list.xml) header部分は私がsimpする前に動作していなかったのでfindViewById()

+0

どのようにしてみては?それは動作しますか? –

答えて

1

これを削除するヘッダー .findViewById(R.id.btnSettings);

ImageButton btnSettings = (ImageButton)findViewById(R.id.btnSettings); 

//あなたがどんなレイアウトを膨張されていない、まだあなたのコンテンツビューは、あなたのボタンとラベルがあり、この中にレイアウトcontact_list.xmlを持っています。

+0

ちょっと、 'header'部分を削除しようとしました。実際には、' findViewById() 'と呼ばれる前に動作していなかったので、' header'部分を追加しました。私は 'ListView'に他のボタンを持っています。 – Ali

+1

"inflating the layout"についてのあなたのコメントは、私のコードでやっていたリフレッシュと関係していた問題を実際に指摘しています。だから私の問題への答えは、あなたはポイントを得る:) – Ali

+0

ありがとう、幸せなコーディングがあります:-) –

1

あなたは、あなたのボタン

final ImageButton btnSettings = (ImageButton) header.findViewById(R.id.btnSettings); 

にマッピングされていますが、labelHeader.setText("Jump");の行にブレークポイントを追加した場合、このよう

final ImageButton btnSettings = (ImageButton)findViewById(R.id.btnSettings); 
+0

干し草Solanki良い歓迎Stackoverflow。揺れ続ける.... –

+0

ちょっと、 'header'部分を削除しようとしました。実際には' findViewById() 'と呼ばれる前に動作していなかったので' header'部分を追加しました。 – Ali

0

に使用しようlabelHeaderヌルにこれを使用していますか? XMLでのonClick:

また代わりのnew View.OnClickListener()は、Androidの設定についてnew OnClickListener()

関連する問題