我正在尝试在选项卡活动中实现可搜索的列表视图
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”。跨度>以上是关于我正在尝试在选项卡活动中实现可搜索的列表视图的主要内容,如果未能解决你的问题,请参考以下文章