2017-02-07 95 views
0

我正在增强我的应用程序从一个简单的ListActivity到一个更复杂的应用程序,除了ListView我还有一个搜索文本和一个Button。
在简单的版本中,当我点击该项目时,监听器就会获取它。
更复杂的是,当我点击该项目时,什么也没有发生,并且在调试模式下,我没有碰到听众。不能点击一个ListView项目

在下面的两个例子中,我剥离了所有不必要的逻辑,仅仅足以重新创建问题。

工作代码:

import android.app.ListActivity; 
import android.content.Context; 
import android.content.Intent; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.ArrayAdapter; 
import android.widget.ListView; 
import android.widget.Toast; 

public class MainActivity extends ListActivity { 
    String[] eventList = {"Queen", "Chicago", "Kinks"}; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     // Define event list 
     setListAdapter(new ArrayAdapter<String> 
       (this, R.layout.activity_main, 
         R.id.lvEventList, eventList)); 
    } 

    // Process List Item selection 
    protected void onListItemClick(ListView l, View v, int position, long id){ 
     Context context = MainActivity.this; 
     Toast.makeText(context, "item " + position + " clicked", Toast.LENGTH_LONG).show(); 
    } 

} 

和相应的布局

<?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:paddingBottom="@dimen/activity_vertical_margin" 
    android:paddingLeft="@dimen/activity_horizontal_margin" 
    android:paddingRight="@dimen/activity_horizontal_margin" 
    android:paddingTop="@dimen/activity_vertical_margin" 
    tools:context=".EventList"> 

    <TextView 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:id="@+id/lvEventList" 
     android:textSize="16sp" 
     android:text="@+id/txtEventName" 
     /> 

</RelativeLayout> 

不工作的代码

import android.app.ListActivity; 
import android.content.Context; 

import android.os.Bundle; 
import android.support.v7.app.AppCompatActivity; 
import android.view.View; 
import android.widget.ArrayAdapter; 
import android.widget.Button; 
import android.widget.EditText; 
import android.widget.ListView; 
import android.widget.Toast; 


public class MainActivity extends AppCompatActivity { 
    String[] eventList = {"Queen", "Chicago", "Kinks"}; 


    ListView listView; 
    ArrayAdapter<String> adapter; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     // Define event list 
     listView = (ListView)findViewById(R.id.lvEventList); 
     adapter = new ArrayAdapter<String>(this, R.layout.custom_list_text, 
       eventList); 
     listView.setAdapter(adapter); 
    } 

    // Process List Item selection 
    protected void onListItemClick(ListView l, View v, int position, long id){ 
     Context context = MainActivity.this; 
     Toast.makeText(context, "item " + position + " was clicked", Toast.LENGTH_LONG).show(); 
    } 

} 

和2个对应的布局:

<?xml version="1.0" encoding="utf-8"?> 

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" 
    android:padding="4dp" 
    android:textColor="#000000" 
    android:focusableInTouchMode="true"> 
    <!--android:background="#eef"--> 

    <LinearLayout 
     android:orientation="horizontal" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:weightSum="100" 
     android:layout_margin="4dp"> 
     listView 

     <Button 
      android:id="@+id/btnSearch" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:text="Search" 
      android:layout_weight="70"> 
      <!--<requestFocus/>--> 
     </Button> 

     <EditText 
      android:id="@+id/txtSearch" 
      android:layout_width="fill_parent" 
      android:layout_height="fill_parent" 
      android:ems="10" 
      android:layout_weight="30" 
      android:background="#ffffff"> 
     </EditText> 


    </LinearLayout> 

    <ListView 
     android:id="@+id/lvEventList" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:padding="2dp" 
     android:layout_margin="4dp" 
     android:footerDividersEnabled="true" 
     /> 

</LinearLayout> 

和(扩展简单的项目列表1复印件)

<?xml version="1.0" encoding="utf-8"?> 
<TextView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@android:id/text1" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:textAppearance="?android:attr/textAppearanceListItemSmall" 
    android:gravity="center_vertical" 
    android:paddingStart="?android:attr/listPreferredItemPaddingStart" 
    android:paddingEnd="?android:attr/listPreferredItemPaddingEnd" 
    android:minHeight="?android:attr/listPreferredItemHeightSmall" 

    android:textColor="#000000" 
    android:background="#ffffff" 
    android:clickable="true" 
    android:contextClickable="true" /> 

任何想法,为什么?

+0

你的第二个XML在Button上方有一个随机的'listView'字...这不起作用 –

回答

1

ListActivity有一个名为onListItemClick方法,但AppComaptActivty没有这种方法,你应该这行后手动将其放置在列表视图

listView.setAdapter(adapter); 

这样写:

listview.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> adapterView, View view, int position, long id) { 
      Context context = MainActivity.this; 
    Toast.makeText(context, "item " + position + " was clicked", Toast.LENGTH_LONG).show(); 

     } 
    }); 
0

onListItemClickAppCompatActivity没有任何意义。

如果您注释了您的Java方法,您会注意到这一点。编译器甚至可能会告诉你“方法未使用”。

例如,在把@Override第二代码的第一码

@Override // This works 
protected void onListItemClick(ListView l, View v, int position, long id){ 
    Context context = MainActivity.this; 
    Toast.makeText(context, "item " + position + " was clicked", Toast.LENGTH_LONG).show(); 
} 

,这是行不通的。现在


,你实际上可以保持一个ListActivity使用自己的XML布局。

你只需要go over the documentation说。

如果您愿意,可以通过在onCreate()中设置您自己的视图布局setContentView()来自定义屏幕布局。要做到这一点,你自己的看法必须包含一个ListView对象id为"@android:id/list"

,看起来像这样

<ListView 
    android:id="@android:id/list" <!-- Notice the ID --> 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" /> 

如果你想使用AppCompatActivity保留,不过,你可以找到findViewById(android.R.id.list)该ID

相关问题