我正在尝试在选项卡活动中实现可搜索的列表视图

Posted

技术标签:

【中文标题】我正在尝试在选项卡活动中实现可搜索的列表视图【英文标题】:I'm trying to implement a searchable List View that in a Tab Activity 【发布时间】:2016-02-03 10:10:48 【问题描述】:

。因此主页有 3 个选项卡,在第一个选项卡中,我需要一个带有搜索编辑文本框的列表视图。以下代码分别作为选项卡功能和带有搜索的列表视图工作。当我将这些结合起来时,我在行中遇到了错误

adapter = new ArrayAdapter(this, R.layout.list_item, R.id.product_name, products);显示按需添加静态包,仅删除 R。

我不知道该怎么做。帮助将不胜感激。

    package com.artificers.subin.inspection;

import android.app.Activity;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.text.Editable;
import android.text.TextWatcher;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.EditText;
import android.widget.ListView;

import java.util.ArrayList;
import java.util.HashMap;

/**
 * Created by Subin on 13-10-2015.
 */
public class Tab1Fragment extends Fragment 

    // List view
    private ListView lv;

    // Listview Adapter
    ArrayAdapter<String> adapter;

    // Search EditText
    EditText inputSearch;


    // ArrayList for Listview
    ArrayList<HashMap<String, String>> productList;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) 


        View V = inflater.inflate(R.layout.tab1_view, container, false);

        // Listview Data
        String products[] = "Dell Inspiron", "HTC One X", "HTC Wildfire S", "HTC Sense", "HTC Sensation XE",
                "iPhone 4S", "Samsung Galaxy Note 800",
                "Samsung Galaxy S3", "MacBook Air", "Mac Mini", "MacBook Pro";

        lv = (ListView) V.findViewById(R.id.list_view);
        inputSearch = (EditText) V.findViewById(R.id.inputSearch);

        // Adding items to listview
        adapter = new ArrayAdapter<String>(this, R.layout.list_item, R.id.product_name, products);
        lv.setAdapter(adapter);

        inputSearch.addTextChangedListener(new TextWatcher() 

            @Override
            public void onTextChanged(CharSequence cs, int arg1, int arg2, int arg3) 
                // When user changed the Text
                Tab1Fragment.this.adapter.getFilter().filter(cs);
            

            @Override
            public void beforeTextChanged(CharSequence arg0, int arg1, int arg2,
                                          int arg3) 
                // TODO Auto-generated method stub

            

            @Override
            public void afterTextChanged(Editable arg0) 
                // TODO Auto-generated method stub
            
        );

        return V;
    



【问题讨论】:

请添加错误的踪迹 无法解析构造函数'ArrayAdapter(com.artificers.subin.inspection.Tab1Fragment, int, int, java.lang.String[])' 【参考方案1】:

问题是您在 ArrayAdapter 构造函数中使用“this”作为上下文参数,但 Fragment 不是 Context 的子类。

因此,在您的情况下,您必须使用以下解决方案之一:

1º - 获取父活动:

 // Adding items to listview
    adapter = new ArrayAdapter<String>(getActivity(), R.layout.list_item, R.id.product_name, products);
    lv.setAdapter(adapter);

2º - 获取上下文:

 // Adding items to listview
    adapter = new ArrayAdapter<String>(getContext(), R.layout.list_item, R.id.product_name, products);
    lv.setAdapter(adapter);

希望对你有帮助

【讨论】:

我将 Fragment 更改为 FragmentActivity 时出现错误 Fragment 和 FragmentActivity 不是同一个对象的子类。 Fragment 不是 Context 的子类,因此要在其中使用上下文,您必须使用 getContext() 或 getActivity()。 FragmentActivity 不是 Fragment,它是可以包含 Fragment 的 Activity 的子类,所以在 FragmentActivity 中不能使用“getActivity()”或“getContext()”,必须使用“this”。跨度>

以上是关于我正在尝试在选项卡活动中实现可搜索的列表视图的主要内容,如果未能解决你的问题,请参考以下文章

当应用程序变为活动状态时刷新 tableView

标签视图中的 Android 操作栏搜索

如何使用列表视图在选项卡式活动的片段中呈现 SQLite 表数据 [重复]

在选项卡中的列表视图中刷新活动 (Android)

我可以在一个活动中更新列表视图而我在另一个活动中吗?

切换回搜索栏处于活动状态时,选项卡栏视图变为空白