【问题标题】:ListView Item not clickableListView 项目不可点击
【发布时间】:2017-12-11 00:28:18
【问题描述】:

我试图创建一个基于输入字符串搜索数据库然后在列表视图中返回结果的活动。但是,所有这些都有效,我的列表视图项目不可点击。我已尝试更改焦点和可点击属性,但到目前为止没有任何效果。

主 XML (add_friend_layout.xml):

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


 <LinearLayout android:id="@+id/AddFriendHeaderLayout"
        android:layout_marginTop="3dip"
        android:layout_height="45dip"
        android:orientation="horizontal" 
        android:layout_width="fill_parent" 
        android:gravity="center">
        <EditText
            android:id="@+id/et_SearchFriend"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginRight="20dp"
            android:ems="10"
            android:inputType="text" />

        <Button
            android:id="@+id/bt_SearchFriend"
            android:layout_width="wrap_content"
            android:layout_height="40dip"
            android:focusable="false"
            android:icon="@android:drawable/ic_search_category_default"
            android:text="Search" >

        </Button>   

    </LinearLayout>
    <LinearLayout android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:layout_marginTop="60dip"  
        android:layout_marginBottom="5dip"
        android:layout_alignParentBottom="true"
        android:layout_above="@+id/AddFriendHeaderLayout"
        android:id="@+id/searchFriendFooterLayout">

        <ListView
            android:id="@android:id/list"
            android:layout_width="match_parent"
            android:clickable="true"
            android:layout_height="wrap_content">

        </ListView>
    </LinearLayout>

</RelativeLayout>

ListView XML (single_listview_layout.xml):

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:clickable="true" >

<TextView 
    android:id="@+id/tv_list"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:padding="10dp"
    android:textSize="20sp" >


</TextView>
</LinearLayout>

主要Java函数(SearchFriendActivity.java):

public class SearchFriendActivity extends ListActivity {

//Progress Dialog
private ProgressDialog pDialog;
private Button bt_searchFriend;
private EditText et_Search_String;
private ListView tv_listview;

String[] arrFriends;
String[] arrUserId;


public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    try{
        setContentView(R.layout.add_friend_layout);


        bt_searchFriend= (Button) findViewById(R.id.bt_SearchFriend);
        et_Search_String = (EditText) findViewById(R.id.et_SearchFriend);
        tv_listview = (ListView) findViewById(R.id.tv_list);


        String searchString="";

        //searchString = String.valueOf(et_Search_String.getText());
        Log.i ("log_search","value of searchString: " + searchString);

        bt_searchFriend.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View view) {
                try{



                    searchFriends aTask = new searchFriends();

                             aTask.execute(String.valueOf(et_Search_String.getText()));
                    String rResult = aTask.get();

                    // Convert aResult to array
                    arrFriends = convertJSONData(rResult);
                    arrUserId = convertJSONDataToUserArray(rResult);


                    setListAdapter(new ArrayAdapter<String>
                                                    (getBaseContext(),       
                                                    R.layout.single_listview_layout, 
                            R.id.tv_list,
                            arrFriends));

                }catch(Exception e){
                    Log.e ("log_search_load",e.toString());
                }
            }
        });


        tv_listview = getListView();


        //handler for List Item click
        tv_listview.setOnItemClickListener(new OnItemClickListener() {
            public void onItemClick(AdapterView<?> parent, View view,
                                int position, long id) {
                // When clicked, show a toast with the TextView text
                Toast.makeText(getApplicationContext(),
                        "Friend request sent for " + 
                                            ((TextView) view).getText(), 
                        Toast.LENGTH_SHORT).show();

                Log.i("log_search_listclick", "Listview clicked");
            }
        });

    }catch(Exception e){
        Log.e ("log_search_load2",e.toString());
    }
} 

【问题讨论】:

    标签: android listview


    【解决方案1】:

    首先,不要使用可聚焦和可点击。当您使用 setOnclick 或其他时,它们会自动创建。

    其次,删除尝试缓存博客然后启动应用程序。因为当问题产生时程序会继续运行,你无法理解问题出在哪里。

    ===>第三tv_listview=...) 第二次使用了两次

    1. tv_listview = (ListView) findViewById(R.id.tv_list);
    2. tv_listview = getListView();

    那么你正在尝试tv_listview.setOnItemClickListener....。如果第二个视图不是第一个视图 seton 不能在“R.id.tv_list”上工作。

    【讨论】:

    • 感谢您的反馈。我尝试删除 tv_listview = getListView() 但这没有帮助。我按照您的建议删除了 try/catch 块,应用程序崩溃了。我已将其与 tv_listview.setOnItemClickListener 的创建隔离开来。如果我删除它,应用程序运行良好。如果我重新添加它,即使函数为空,应用程序也会崩溃并出现 nullpointerexception。有什么想法吗?
    • OK - 所以我发现我正在将 tv_listview 链接到行 def xml 文件中的 textview 对象,而不是列表视图。一旦我解决了这个问题,nullpointexcept 就消失了。我仍然无法让列表视图执行 onclick 功能。
    • okey 现在尝试清除 Toast 消息。然后运行应用程序。如果你没有看到任何问题,Toast 中的问题 (==>getApplicationContext()
    • 我认为问题一定与xml定义有关。我发现如果我将 setListAdapter 调用更改为使用 android.R.layout.simple_list_item_1 而不是我的 single_listview_layout.xml,它会起作用。我仍然不知道为什么。
    • 当你在listview的arrayAdapter中使用add item时,arrayAdapter调用setText("....");。但是你的 tw_listView 是 LinearLayout。调用 setText 程序创建异常时。所以你的 singleRow 布局必须扩展 TextView 或 Button 或另一个可以设置文本视图。将您的 tw_listView 转换为 Textview。
    猜你喜欢
    • 1970-01-01
    • 2012-06-06
    • 2012-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多