2013-09-25 84 views
0

我有按鈕,點擊後會顯示一個listview,點擊listview項時它必須在logcat上打印一些東西。我以這種方式實現了這一點,即列表視圖及其監聽器出現在按鈕onclick監聽器中。Listview 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> 
..... 

誰能幫助

編輯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

哦,得到了你的問題。你已經實現了按鈕點擊內的Listview itemclick。意味着它唯一的可能性就是點擊按鈕,並且確實不存在。 :) – Amit

回答

0

從您的onClick()方法中刪除此代碼和實施的onClick()方法之外。只需在那裏設置適配器,但實現是錯誤的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); (視圖組)view.findViewById從該方法中刪除這些所有代碼,在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中沒有任何元素是竊取事件,如按鈕或帶有setClickable(true)的TextView。

+0

是的,你是正確的如何解決。我在textview上保留了android:clickable =「false」,但徒勞無功。 – pradeep

+0

如果還不能解決問題,請發佈list_layout_item和MyListAdapter的代碼,以便提供準確的答案。 – betorcs

+0

我已經添加了MyListAdapter和list_layout_item – pradeep