2017-08-29 42 views
0

我在我的应用程序中使用片段。每个片段都有一个列表视图。 ListView是包含单个图像视图的自定义列表视图。SearchView内包含ListView的片段?

<ImageView 
    android:id="@+id/imageView3" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_weight="1" 
    app:srcCompat="@android:drawable/ic_notification_overlay" /> 

listview项是图像。我想实现searchview。我想每一个列表视图项如“铃儿响叮当等”的名称,也是1,2号即”进行搜索。等。

包含列表视图标题我的Java文件。

public class carolFrag extends Fragment { 

//code 

public carolFrag() { 
    // Required empty public constructor 
} 

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

} 

private static final String TAG = "carolFrag"; 

@Nullable 
@Override 
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup main_content, @Nullable Bundle savedInstanceState) { 
    View view = inflater.inflate(R.layout.fragment_carol, main_content, false); 


    final int[] menuImage = {R.drawable.carol_1_title, R.drawable.carol_2_title,R.drawable.carol_3_title,R.drawable.carol_4_title,R.drawable.carol_5_title,R.drawable.carol_6_title,R.drawable.carol_7_title,R.drawable.carol_8_title,R.drawable.carol_9_title,R.drawable.carol_10_title,R.drawable.carol_11_title}; 
    final ListView listView = (ListView) view.findViewById(R.id.CarolList); 

    listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> adapterView, View view, int position, long l) { 


      Intent intent1 = new Intent (getActivity(), PackageC.class) 
      intent1.putExtra("position", position); 
      startActivity(intent1); 




     } 
    }); 
    AdapterCarols adapter = new AdapterCarols(getContext(), menuImage); 
    listView.setAdapter(adapter); 

    // Inflate the layout for this fragment 



    return view; 
} 

}

我无法作出任何逻辑作为数组可绘制在里面。

回答

0

因为数组是充满可绘制的,它不是一个数据库的东西或anithing每一个解决方案,你我会得到的将是我认为简单的方法是让另一个阵列也许是 - String [] - 与drawables的名称按照它们在原始序列中的顺序相同 - final int [] menuImage - 您可以在String数组中搜索并保存结果的位置。然后使用这些位置创建一个新数组(int []),将与这些位置相匹配的drawable放在这个新数组中。最后更改列表视图的适配器,将结果和notifydatachange()传递给数组。在列表视图中进行更新。

public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup 
main_content, @Nullable Bundle savedInstanceState) { 
View view = inflater.inflate(R.layout.fragment_carol, main_content, false); 


final int[] menuImage = {R.drawable.carol_1_title, R.drawable.carol_2_title,R.drawable.carol_3_title,R.drawable.carol_4_title,R.drawable.carol_5_title,R.drawable.carol_6_title,R.drawable.carol_7_title,R.drawable.carol_8_title,R.drawable.carol_9_title,R.drawable.carol_10_title,R.drawable.carol_11_title}; 


final ListView listView = (ListView) view.findViewById(R.id.CarolList); 

SearchView sv = view.findviewById(R.id.searchview); 
sv.setOnQueryTextListener(new SearchView.OnQueryTextListener() 
      { 
       public boolean onQueryTextChange(String par1) 
       { 
        return false; 
       } 

       public boolean onQueryTextSubmit(String par1) 
       { 

         int [] searchresults = PerformSearch(par1); 
         AdapterCarols newadapter = new 
           AdapterCarols(getContext(), searchresults); 
         listView.setAdapter(adapter); 
        listview.invalidate(); // don't remember listview refresh method. I work with Recyclerview, they have a notifyDatasetChange(); method. 

       } 
     }); 

listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
    @Override 
    public void onItemClick(AdapterView<?> adapterView, View view, int position, long l) { 


     Intent intent1 = new Intent (getActivity(), PackageC.class) 
     intent1.putExtra("position", position); 
     startActivity(intent1); 




    } 
}); 
AdapterCarols adapter = new AdapterCarols(getContext(), menuImage); 
listView.setAdapter(adapter); 

// Inflate the layout for this fragment 



return view; 
} 


private int[] PerformSearch(par1) 
{ 

String [] strcarols = {carol_1_title,carol_2_title,carol_3_title,carol_4_title,carol_5_title,carol_6_title,carol_7_title,carol_8_title,carol_9_title,carol_10_title,carol_11_title}; 

int[] menuImage = {R.drawable.carol_1_title, R.drawable.carol_2_title,R.drawable.carol_3_title,R.drawable.carol_4_title,R.drawable.carol_5_title,R.drawable.carol_6_title,R.drawable.carol_7_title,R.drawable.carol_8_title,R.drawable.carol_9_title,R.drawable.carol_10_title,R.drawable.carol_11_title}; 

int[] results = new int[]; 

int carolsresultcount = 0, index =0; 
    /// simplest way 
    for(String carol:strcarols) 
    { 
    if(carol.contains(par1)) 
     { 
     results [carolsresultcount++] = menuImage [index]; 
     } 
     index++; 
    } 

return results; 


} 

我希望这可以解决您的问题。

+0

你能再细说一下吗? –

+0

它不工作。它可以用hashmaps完成吗?我不记得hashmaps。 –

+0

它说carolFrag中的PerformSearch()不能应用。它无法解析listView.setAdapter(适配器);中的适配器。并且它无法解析listview.invalidate();中的listview。它无法解析String [] strcarols = {titles}中的标题; –