2013-05-19 7 views
0

У меня есть кнопки в верхней части моего списка. Кнопки не работают, пока я не выберу элемент из списка. По некоторым другим сообщениям, я должен добавить следующую строку в мой XML-файл: android: focusable = "false". Однако после добавления этой строки никаких изменений не произошло.Кнопки, не работающие со списком

Вот мой XML-файл:

<LinearLayout 
    android:layout_weight="2" 
    android:layout_height="fill_parent" 
    android:layout_width="match_parent" 
    > 
<VideoView 
    android:id="@+id/video_view" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_gravity="center" 
    /> 
</LinearLayout> 

<LinearLayout 
    android:layout_weight="1" 
    android:layout_height="fill_parent" 
    android:layout_width="fill_parent" 
    android:orientation="vertical" > 
    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_marginLeft="16dp" 
     android:layout_marginRight="16dp" 
     android:orientation="horizontal" > 

     <Button 
      android:id="@+id/chapters" 
      android:layout_width="wrap_content" 
      android:layout_height="@dimen/btn_layout_height" 
      android:textSize="@dimen/text_size" 
      android:background="@drawable/button_custom" 
      android:focusable="false" 
      android:text="@string/chapters" /> 

     <Button 
      android:id="@+id/scales" 
      android:layout_width="100dp" 
      android:layout_height="@dimen/btn_layout_height" 
      android:textSize="@dimen/text_size" 
      android:background="@drawable/button_custom" 
      android:focusable="false" 
      android:text="@string/scales" /> 

     <Button 
      android:id="@+id/b_flat" 
      android:layout_width="wrap_content" 
      android:layout_height="@dimen/btn_layout_height" 
      android:textSize="@dimen/text_size" 
      android:background="@drawable/button_custom" 
      android:text="@string/b_flat" /> 

     <Button 
      android:id="@+id/e_flat" 
      android:layout_width="75dp" 
      android:layout_height="@dimen/btn_layout_height"  
      android:textSize="@dimen/text_size" 
      android:background="@drawable/button_custom" 
      android:text="@string/e_flat" /> 

     <Button 
      android:id="@+id/concert" 
      android:layout_width="wrap_content" 
      android:layout_height="@dimen/btn_layout_height" 
      android:textSize="@dimen/text_size" 
      android:background="@drawable/button_custom" 
      android:text="@string/concert" /> 

     <Button 
      android:id="@+id/bass" 
      android:layout_width="75dp" 
      android:layout_height="@dimen/btn_layout_height" 
      android:textSize="@dimen/text_size" 
      android:background="@drawable/button_custom" 
      android:text="@string/bass" /> 

     <Button 
      android:id="@+id/video" 
      android:layout_width="wrap_content" 
      android:layout_height="@dimen/btn_layout_height" 
      android:textSize="@dimen/text_size" 
      android:background="@drawable/button_custom" 
      android:text="@string/video" /> 

     <Button 
      android:id="@+id/practice" 
      android:layout_width="wrap_content" 
      android:layout_height="@dimen/btn_layout_height"  
      android:textSize="@dimen/text_size" 
      android:background="@drawable/button_custom" 
      android:text="@string/practice" />              
    </LinearLayout> 

<FrameLayout 
      android:id="@+id/fragmentContainer" 
      android:layout_height="match_parent" 
      android:layout_width="match_parent" 
      /> 
</LinearLayout> 

Вот код, который я использую для отображения списка:

public class ChapterListFragment extends ListFragment { 
private static final boolean VERBOSE = true; 
private ArrayList<Chapters> mChapters; 
private static final String TAG = "ChapterListFragment"; 

private Button mChaptersButton; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    if (VERBOSE) Log.v(TAG, "+++ onCreate +++"); 
    super.onCreate(savedInstanceState);    

    getActivity().setTitle(R.string.chapters_title); 
    mChapters = ChapterList.get(getActivity()).getChapters(); 

    ChapterAdapter adapter = new ChapterAdapter(mChapters); 
    setListAdapter(adapter);   

} 

Я обновил свой «onListItemClick на следующее:

@Override 
public void onListItemClick(ListView l, View v, int position, long id) { 
    //if (VERBOSE) Log.v(TAG, "+++ onListItemClick +++");  

    // Get the chapter from the adapter 
    Chapters c = ((ChapterAdapter)getListAdapter()).getItem(position); 

    //Start ImprovisationActivity 
    Intent i = new Intent(getActivity(), ImprovisationActivity.class); 
    i.putExtra(ChapterFragment.EXTRA_CHAPTER_ID, c.getId()); 
    startActivity(i); 
} 

private class ChapterAdapter extends ArrayAdapter<Chapters> { 

    public ChapterAdapter(ArrayList<Chapters> chapters) { 
     super(getActivity(), 0, chapters); 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     // If we weren't given a view, inflate one 
     if (convertView == null) { 
      convertView = getActivity().getLayoutInflater() 
        .inflate(R.layout.list_item_chapter, null); 
     } 
     // Configure the view for this Chapter 
     Chapters c = getItem(position); 

     TextView titleTextView = 
       (TextView) convertView.findViewById(R.id.chapter_list_item_titleTextView); 
     titleTextView.setText(c.getChapter()); 

     return convertView;   
    } 
} 

@Override 
public void onResume() { 
    super.onResume(); { 
    ((ChapterAdapter)getListAdapter()).notifyDataSetChanged();  
    } 
} 

}

Для тех, кто с той же проблемой, я добавил следующий код в моей деятельности, и теперь мои кнопки имеют фокус:

public class ChapterListActivity extends SingleFragmentActivity { 

private static final boolean VERBOSE = true; 
private static final String TAG = "ChapterListActivity"; 

private Button mChaptersButton; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    if (VERBOSE) Log.v(TAG, "+++ onCreate +++"); 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_improvisation);   

    mChaptersButton = (Button)findViewById(R.id.chapters);  

    // Need to default the button to pressed 
    mChaptersButton.setSelected(true); 
    mChaptersButton.setOnClickListener(new OnClickListener() {   
     @Override 
     public void onClick(View v) { 
      if (mChaptersButton.isSelected()){ 
        if (VERBOSE) Log.v(TAG, "+++ onClick for mChaptersButton +++"); 
        mChaptersButton.setSelected(false); 
       Toast.makeText(getApplicationContext(), "Chapters Button Not Selected", 
          Toast.LENGTH_SHORT).show(); 
       } else { 
       Toast.makeText(getApplicationContext(), "Chapters Button Selected", 
          Toast.LENGTH_SHORT).show(); 
       mChaptersButton.setSelected(true); 
       } 
     } 
    }); 
} 

@Override 
protected Fragment createFragment() { 
    if (VERBOSE) Log.v(TAG, "+++ createFragment +++"); 
    return new ChapterListFragment(); 
} 

}

ответ

0

Ваш Button инстанциируется внутри onListItemClick так они не будет clickcable, пока вы не нажмете на элемент списка. Вы можете переместить их в onCreate(), но тогда вам нужно будет inflate другой View там также, используя setContentView()

Кроме того, как указано в комментарии по buptcoder, я не вижу OnClickListener прикрепленную к Button. Я до сих пор не вижу, чтобы его можно было щелкнуть до тех пор, пока вы не вытащите его из слушателя, который находится сейчас, но OnClickListener по-прежнему необходимо подключить к Button.

+0

У меня был код onClickListener, но, видимо, он не включал его в мой пост. (моя ошибка) Кнопки имеют фокус после перемещения их из onListItemClick и в мой onCreate для этой активности. Спасибо за вашу помощь. – sowens

+0

Добро пожаловать. Рад, что я мог бы помочь – codeMagic

1

Эти кнопки не будут работать ни с чем, Посмотреть список.

Чтобы получить клики (я предполагаю, что это то, что вы хотите), выполните свою деятельность, чтобы реализовать View.OnClickListener и реализовать логику обработки кликов в методе onClick (подробнее здесь https://developer.android.com/guide/topics/ui/ui-events.html), а в onCreate сделать это:

Button b = (Button) findViewById(R.id.concert); 
b.setOnClickListener(this); 
+0

Спасибо за вашу помощь. Я переместил код для onClick в действие, которое вызывается изначально. У меня есть 2 действия, поэтому я должен был определить правильный. Теперь кнопки имеют фокус и работает onClick. – sowens

Смежные вопросы