ورود

View Full Version : اشکال در فیلتر جستجو فوری فوری



darkhah1
دوشنبه 20 اردیبهشت 1395, 20:59 عصر
سلام بنده برای ساخت جستجو در لیست ویو از آموزش همین سایت استفاده کردم و همچیزش درسته ولی وقتی چیزی رو جستجو میکنم و توی لیست ویو ایتم های که کلمه مورد نظر من توش نیست حذف میشه قطعا ایتم های لیست طبق جستجو عوض میشه ولی با کلیک کردن روی انها باز صفحه ای مربوط به لیستی که جستجو نشده باز میکنه.
مثال
1-زهرا
2-مینا
3-مریم
4-فاطمه
جستجو حرف "ف"
1-فاطمه
با کلیک کردن روی فاطمه باز محتوای لیست اصلی یعنی زهرا باز می شود.
این کد کلیک کردن.
خواهشا کمک کنید.


کد:

lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {

@Override
public void onItemClick(AdapterView<?> parent, final View view,
int position, long id) {
Intent i = new Intent(getApplicationContext(), Show_Subjects.class);
String Subject_number = String.valueOf(position);
i.putExtra("subject_number", Subject_number);
startActivity(i);
}

Nevercom
سه شنبه 21 اردیبهشت 1395, 08:57 صبح
دقیقاً نمیدونم چه کدهایی بکار بردید، اما ایرادی که مشخص بنظر میاد این هست که سعی دارید بر اساس position یک آیتم رو شناسایی کنید، position اشاره می کنه که روی ردیف چندم از لیست وو کلیک شده، ممکنه در یک جستجو فاطمه در ردیف اول باشه و در جستجوی دیگه زهرا در ردیف اول باشه، پس با استفاده از این اطلاعات نمیشه دقیقاً شناسایی کرد کدوم آیتم کلیک شده.

شما باید به نحوی اطلاعات دقیق آیتمی که نمایش داده میشه رو استخراج کنید، اگر متدهای آداپتور رو درست پیاده سازی کرده باشید احتمالاً پارامتر id حاوی یک شناسه از آیتمتون هست که میتونید ازش استفاده کنید.

در بدترین حالت هم میتونید اطلاعات آیتم رو به خود View متصل کنید (با استفاده از setTag) و در نهایت در این متد، اطلاعات رو از خود View استخراج کنید.

darkhah1
سه شنبه 21 اردیبهشت 1395, 10:46 صبح
ممنون از پاسختون همشهری این کل کد سرچم هست ممنون میشم مشکلم را حل کنید:قلب::قلب::تشویق::تشویق:


کد:
package com.darkhah1.madarek;

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

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.text.Editable;
import android.text.TextWatcher;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.EditText;
import android.widget.ListView;

public class Search extends Activity {

// List view
private ListView lv;

// Listview Adapter
ArrayAdapter<String> adapter;

// Search EditText
EditText inputSearch;


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

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

// Listview Data
String products[] = getResources().getStringArray(R.array.search);

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

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

/**
* Enabling Search Filter
* */
inputSearch.addTextChangedListener(new TextWatcher() {

@Override
public void onTextChanged(CharSequence cs, int arg1, int arg2, int arg3) {
// When user changed the Text
Search.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
}
});

// after click
lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {

@Override
public void onItemClick(AdapterView<?> parent, final View view,
int position, long id) {
Intent i = new Intent(getApplicationContext(), Show_Subjects.class);
String Subject_number = String.valueOf(position+1);
i.putExtra("subject_number", Subject_number);
startActivity(i);
}

});
}
}

darkhah1
سه شنبه 21 اردیبهشت 1395, 18:44 عصر
خودم فک میکنم مشکل از اینجاست
String Subject_number = String.valueOf(position);
کسی هست کمک کنه؟؟؟

Nevercom
سه شنبه 21 اردیبهشت 1395, 20:21 عصر
همونطور که گفتم، آیتم ها در این لیست شناسه ی منحصربفردی ندارن، و خب استفاده از position برای پیدا کردنشون هم به دلیلی که عرض کردم اشتباهه.
بهتره که کلاسی برای Adapter بسازید تا کنترل کامل روی آیتم ها و نحوه ی نمایش داشته باشید.

به هرعنوان، ببینید کد زیر اطلاعات درست رو در اختیارتون میزاره ؟ (تو OnItemClick قرارش بدید)

Log.i("Item",parent.getItemAtPosition(position).toString());