2013-08-14 6 views
0

У меня был мой onItemClickListener, работающий на моем ListView внутри моего DrawerLayout, работающего нормально. Но я добавил ProgressBar, который отображается раньше всего, тогда он установлен в View.GONE. Однако я больше не могу выбирать и элементы из своего списка.Android ListView onItemClickListener заблокирован ProgressBar

list_item.xml

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:descendantFocusability="blocksDescendants" > 

<TextView 
    android:id="@+id/label" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:background="#000000" 
    android:focusable="false" 
    android:paddingBottom="25dp" 
    android:textColor="#ffffff" 
    android:textSize="20sp" > 
</TextView> 

</RelativeLayout> 

main_activity.xml:

<android.support.v4.widget.DrawerLayout  xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:id="@+id/drawer_layout" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
tools:context=".MainActivity" > 

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

<ListView 
    android:id="@+id/drawer" 
    android:layout_width="240dp" 
    android:layout_height="match_parent" 
    android:layout_gravity="left" 
    android:background="#000" 
    android:choiceMode="singleChoice" /> 

<ProgressBar 
    android:id="@+id/device_progress" 
    style="?android:attr/progressBarStyleSmall" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_centerHorizontal="true" 
    android:layout_centerVertical="true" 
    android:indeterminateDrawable="@drawable/progress" 
    android:visibility="gone" /> 

</android.support.v4.widget.DrawerLayout> 

Java код:

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    Log.d(TAG, "Executing onCreate()."); 
    setContentView(R.layout.activity_devices); 
    progress = (ProgressBar) findViewById(R.id.device_progress); 
    progress.setVisibility(View.VISIBLE); 
    manager = MainScreenActivity.getDeviceManager(); 
    manager = MainScreenActivity.getDeviceManager(); 
    drawerInfo = manager.getDrawerInfo(); 
    mDrawerList = (ListView) findViewById(R.id.drawer); 
    mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout); 
    adapter = new ArrayAdapter<String>(this, 
      R.layout.drawer_list_item, R.id.label, drawerInfo); 
    mDrawerList.setAdapter(adapter); 
    mDrawerLayout 
      .setDrawerListener(new DrawerLayout.SimpleDrawerListener() { 
       @Override 
       public void onDrawerClosed(View drawerView) { 
        super.onDrawerClosed(drawerView); 
        Log.d(TAG, "onDrawerClosed() executed!"); 
       } 

       @Override 
       public void onDrawerOpened(View view) { 
        super.onDrawerOpened(view); 
        Log.d(TAG, "onDrawerOpened() executed!"); 
        refreshDrawer(); 
       } 
      }); 
    mDrawerList.setOnItemClickListener(new OnItemClickListener() { 

     @Override 
     public void onItemClick(AdapterView<?> parent, View view, 
       final int pos, long id) { 
      Log.d(TAG, "CLICKED " + pos); 
      selectDevice(pos); 
     } 
    }); 
} 
+0

Я уверен, что добавление xml ничего не сломало. Разве вы не что-то изменили в своем Java-коде? –

+0

@Waza_Be Я добавил свой код Java, когда комментирую/удаляю XML и код Java, он отлично работает. Итак, это определенно из-за ProgressBar –

+0

Вы отключили/спрятали список до того, как была показана панель выполнения? И вы включили/show listview после того, как индикатор выполнения был скрыт? Добавьте код в свой ответ. – JustAnotherCoder

ответ

0

Есть несколько Просмотр внутри DrawerLayout. doc предлагает вам только два!

Чтобы добавить панель навигации, объявить пользовательский интерфейс с объектом DrawerLayout в качестве корневого зрения макета. Внутри DrawerLayout добавьте одно представление, содержащее основное содержимое экрана (ваш основной формат, когда ящик скрыт), и еще один вид , содержащий содержимое навигационного ящика.

Я бы предложил группе ListvView и ProgressBar в одном контейнере

+0

Как мне добавить их в один контейнер? –

+0

Вы слышали о LinearLayout? Поместите их в одну вертикальную LinearLayout –

+0

Я попробовал это, и она сломала его, я больше не могу вытащить свой ящик. Изменен код: http://pastebin.com/GCdYL4SB –

1

нашел решение, вместо добавления нового элемента внутри корневой DrawerLayout, поместите его внутри FrameLayout, где ваш основной контент должен идти. Это была глупая ошибка, но если у кого-то другая проблема. Вот он:

<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:id="@+id/drawer_layout" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
tools:context=".MainActivity" > 

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

    <ProgressBar 
     android:id="@+id/device_progress" 
     style="?android:attr/progressBarStyleLarge" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_gravity="center" 
     android:indeterminateDrawable="@drawable/progress" 
     android:visibility="gone" /> 
</FrameLayout> 

<ListView 
    android:id="@+id/drawer" 
    android:layout_width="240dp" 
    android:layout_height="match_parent" 
    android:layout_gravity="left" 
    android:background="#000" 
    android:choiceMode="singleChoice" /> 

</android.support.v4.widget.DrawerLayout> 
Смежные вопросы