2013-02-16 3 views
1

Я пытаюсь получить кнопку для работы в строке ListView. Я читал о Custom Adapter, но не могу заставить его работать. В основном, у меня есть класс List_item, у которого есть 4 кнопки TextView и 1, которые ограничивают ListView в другом классе. один из текстовых элементов имеет id/Name. так что я хочу, когда я нажимаю кнопку на этой строке. он получит это значение TextView «name» и добавит его в ArrayList, и если я нажму другую кнопку в другой строке, он добавит значение «name» к тому же самому arraylist. поэтому в основном будут добавлены все те, которые я нажал на кнопку в ArrayList. это возможно??.Пользовательский макет для каждой строки в ListView

JUST TO ADD. textView Являются входящими в мою базу данных ..thanks upfront для любых ответов.

List_item.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:id="@+id/RelativeLayout1" 
android:layout_width="fill_parent" 
android:layout_height="match_parent" 
android:orientation="vertical" 
android:paddingBottom="10dp" > 

<TableRow 
    android:id="@+id/tableRow1" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:baselineAligned="false" > 

    <TextView 
     android:id="@+id/id" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:textColor="#FFFFFF" 
     android:visibility="gone" /> 

    <TextView 
     android:id="@+id/name" 
     android:layout_width="wrap_content" 
     android:layout_height="match_parent" 
     android:layout_gravity="left" 
     android:layout_weight="3" 
     android:textAllCaps="true" 
     android:textColor="#FFFFFF" 
     android:textSize="30sp" 
     android:textStyle="bold" 
     android:typeface="serif" /> 

    <TextView 
     android:id="@+id/price" 
     android:layout_width="wrap_content" 
     android:layout_height="match_parent" 
     android:layout_gravity="center" 
     android:layout_weight="1" 
     android:gravity="right" 
     android:paddingRight="15dp" 
     android:textAllCaps="true" 
     android:textColor="#FFFFFF" 
     android:textSize="30sp" 
     android:textStyle="bold" 
     android:typeface="serif" /> 

    <Button 
     android:id="@+id/order" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_gravity="right" 
     android:layout_weight="0" 
     android:focusable="false" 
     android:minHeight="0dp" 
     android:minWidth="50dp" 
     android:text="+" 
     android:textStyle="bold" /> 

</TableRow> 

<TableRow 
    android:id="@+id/tableRow2" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:layout_alignParentLeft="true" 
    android:layout_below="@+id/tableRow1" 
    android:gravity="center_horizontal" > 

    <TextView 
     android:id="@+id/description" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:textAllCaps="true" 
     android:textColor="#FFFFFF" 
     android:textSize="20sp" 
     android:textStyle="bold" 
     android:typeface="serif" 
     android:visibility="gone" /> 

</TableRow> 

</RelativeLayout> 

мой menu.xml имеет

<ListView 
    android:id="@android:id/list" 
    android:layout_width="fill_parent" 
    android:layout_height="697dp" > 
</ListView> 

теперь я хочу, чтобы получить значения от "имени" TextView, когда я нажимаю кнопку на своем ряду.

, который, как я использовал, чтобы заполнить мой ListView, прежде чем я добавить кнопку, и он работает нормально

ListAdapter adapter = new SimpleAdapter (getCategoryItems.this,itemsList,R.layout.list_item, new String[]{ TAG_ID, TAG_NAME,TAG_PRICE, TAG_DESCRIPTION},new int[] { R.id.id, R.id.name, R.id.price, R.id.description}); 
setListAdapter(adapter); 

но теперь после того, как я добавил кнопку он не получает никаких значений, так что я reaserched и я нашел что я должен изменить свой sampleAdapter на пользовательский адаптер. и добавьте кнопку внутри getView(), но я не могу получить ее.

моя кнопка OnClickListener

Button order = (Button) view.findViewById(R.id.order); 
order.setOnClickListener(new Button.OnClickListener() { 
    @Override 
    public void onClick(View v) { 
     String name = ((TextView)view.findViewById(R.id.name)).getText().toString(); 
     Log.d("Selected : ", name); 
    } 
}); 
+2

Просьба указать минимальное количество кода, чтобы проиллюстрировать, что вы делаете. –

+0

Я добавил метод фона, который должен произойти до того, как я сделаю списокAdapter в postexceute(). –

+1

Поскольку ваш вопрос не имеет ничего общего с JSON, я предлагаю вам написать более простой пример с некоторыми жестко закодированными данными. –

ответ

0

Вам нужно будет создать пользовательский класс адаптера для ListView. Поскольку вы получаете данные из базы данных, я предлагаю вам продлить CursorAdapter и переопределить newView() и bindView(). По моему опыту, как сделать это правильно, плохо документировано, поэтому я попытаюсь дать некоторые указания здесь.

В newView() вам необходимо использовать LayoutInflator, который предоставляется вам по телефону getLayoutInflator() на вашем ListActivity. После того, как вы назовете inflate() на этом LayoutInflator, вы можете получить кнопку для этой конкретной строки и установить ее OnClickListener.

В bindView() вы делаете практически все то же самое, за исключением того, что вам не нужно раздувать новый вид, так как Android просит повторно использовать существующий объект View. Возможно, вы захотите создать дополнительные методы, чтобы уменьшить количество повторяющегося кода.

Надеюсь, это поможет, хотя это объясняется на английском языке, а не с примером кода.

+0

спасибо большое. я проработаю свой путь через эту информацию, которую вы мне предоставили. –

+0

@MoAdel Вы можете посмотреть расширение 'SimpleCursorAdapter', а не просто' CursorAdapter'. Вы могли бы воспользоваться этим, чтобы заполнить «TextView» для вас, поэтому вам не нужно делать это вручную. –

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