2013-09-25 6 views
0

У меня есть кнопка, которая при нажатии отображает список и при нажатии на элемент listview она должна печатать что-то на logcat. Я реализовал этот способ таким образом, чтобы список и его слушатель присутствовали внутри кнопки onclick listener.Listview прослушиватель не получает вызов

Все работает хорошо, за исключением слушателя списка следует не вызывалось (то есть. Ничего не печатает на LogCat при нажатии на пункте списка следует)

Вот мой слушатель.

public class MyClickListener implements View.OnClickListener { 
    LinearLayout parent; 
    LayoutInflater layoutInflater; 
    Context context; 
    Home home; 

    @Override 
    public void onClick(View view) { 
     parent = (LinearLayout) home.findViewById(R.id.main_view); 
     View childLayout = layoutInflater.inflate(R.layout.mylayout, (ViewGroup) view.findViewById(R.id.list_layout)); 
     parent.addView(childLayout, 0); 

     LinearLayout layout = (LinearLayout) home.findViewById(R.id.main_view); 
     ListView list = (ListView) layout.findViewById(R.id.list); 
     list.setAdapter(new MyListAdapter(context)); 
     lsit.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
      @Override 
      public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) { 
       System.out.println("hello Android"); 
      } 
     }); 
    } 
} 

mylayout.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
       android:id="@+id/list_layout" 
       android:orientation="vertical" 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:padding="15dp"> 

    <ListView 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:id="@+id/list" 
     android:padding="15dp" 
     android:divider="@android:color/transparent" 
     android:dividerHeight="5dp" 
     android:listSelector="@android:color/transparent" 
     android:cacheColorHint="@android:color/transparent"/> 
</LinearLayout> 

Home.java

public class Home extends Activity { 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState);  
     setContentView(R.layout.home); 
     Button button= (Button) findViewById(R.id.but); 
     button.setOnClickListener(new MyClickListener(this,this,layoutInflater)); 
    } 
} 

home.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
       android:layout_width="fill_parent" 
       android:layout_height="wrap_content" 
       android:gravity="center" 
       android:background="@color/background"> 
... 
    <LinearLayout 
     android:orientation="vertical" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:layout_gravity="center" 
     android:id="@+id/main_view"> 
    </LinearLayout> 
..... 

Может кто-нибудь помочь

Edit 1

MyListAdapter.java

private class MyListAdapter extends BaseAdapter { 
     String[] items; 
     LayoutInflater inflater; 
     Context context; 

     public MyListAdapter(Context context) { 
      this.context = context; 
      Resources resources = context.getResources(); 
      items = new String[]{resources.getString(R.string.q1), resources.getString(R.string.q2), resources.getString(R.string.q3)}; 
     } 

     @Override 
     public int getCount() { 
      return items.length; 
     } 

     @Override 
     public Object getItem(int i) { 
      return i; 
     } 

     @Override 
     public long getItemId(int i) { 
      return i; 
     } 

     @Override 
     public View getView(int i, View view, ViewGroup viewGroup) { 
      View view1 = view; 
      inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
      if (view == null) 
       view1 = inflater.inflate(R.layout.list_layout_item, null); 
      TextView question = (TextView) view1.findViewById(R.id.itemtext); 
      question.setText(items[i]); 
      return view1; 
     } 
    } 

list_layout_item.xml

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
       android:id="@+id/item" 
       android:layout_width="fill_parent" 
       android:layout_height="wrap_content" 
       style="@style/itemStyle"> 

    <TextView 
     android:id="@+id/itemtext" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:padding="8dp" 
     android:drawableRight="@drawable/disclosure_indicator"/> 
</LinearLayout> 
+0

Вы уверены, что вы добавили кнопку в свой XML-файл. – Amit

+0

Да, но я не вложил все это. Кроме того, он подходит к списку, но только слушатель не получает вызов – pradeep

+0

ohhh, у вас есть проблема. У вас есть элемент списка Listview внутри кнопки. Означает, что это возможно только при нажатии кнопки и на самом деле, которые никогда не существуют. :) – Amit

ответ

0

Удалить этот код из метода OnClick() и осуществлять за пределами этого метода OnClick(). Просто установите Adapter там, но реализация неверна og onItemClickListener().

lsit.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
      @Override 
      public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) { 
       System.out.println("hello Android"); 
      } 
     }); 
+0

где я должен писать это, а что не так на onItemClickListener() – pradeep

+0

parent = (LinearLayout) home.findViewById (R.id.main_view); Просмотреть childLayout = layoutInflater.inflate (R.layout.mylayout, (ViewGroup) view.findViewById (R.id.list_layout)); удалите эти коды из этого метода, инициализируйте его в onCreate(). Просто установите адаптер там и поместите onItemClickListener() в onCreate(). parent.addView (childLayout, 0); LinearLayout layout = (LinearLayout) home.findViewById (R.id.main_view); ListView list = (ListView) layout.findViewById (R.id.list); –

+0

Вы хотите расширить класс MyClickListener до Activity и реализовать некоторый код в onCreate(). Я попробую. – pradeep

0

Убедитесь, что в вашем list_item_layout не имеет какой-либо элемент крадет событие, кнопка или TextView с setClickable (истина), как.

+0

да, вы правы, как решить. Я сохранил android: clickable = "false" в текстовом режиме, но напрасно. – pradeep

+0

Если вы еще не решили, разместите код вашего list_layout_item и MyListAdapter, проще дать точный ответ. – betorcs

+0

Я добавил MyListAdapter и list_layout_item – pradeep

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