PDA

View Full Version : مشکل در ساخت جستجو



esmail3309
سه شنبه 25 شهریور 1393, 13:35 عصر
سلام

من از این کد برای ساخت جست و جو در برنامم استفاده کردم (اکتیویتی جست و جو) (از دیتابیس استفاده نمیکنم):

package com.example.clashup;

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.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
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.search);

// Listview Data
String products[] = {


" آیتم 1",
" آیتم 2",
" آیتم 3",
" آیتم 4",
" آیتم 5",
" آیتم 6",
" آیتم 7",
" آیتم 8",
" آیتم 9",
" آیتم 10",

};

lv = (ListView) findViewById(R.id.list_view);
inputSearch = (EditText) 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);




lv.setAdapter(adapter);
lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
Intent intent = new Intent();
switch(arg2){
case 0: intent.setClass(arg1.getContext(), item_1.class ); startActivity(intent); break;
case 1: intent.setClass(arg1.getContext(), item_2.class ); startActivity(intent); break;
case 2: intent.setClass(arg1.getContext(), item_3.class ); startActivity(intent); break;
case 3: intent.setClass(arg1.getContext(), item_4.class ); startActivity(intent); break;
case 4: intent.setClass(arg1.getContext(), item_5.class ); startActivity(intent); break;
case 5: intent.setClass(arg1.getContext(), item_6.class ); startActivity(intent); break;
case 6: intent.setClass(arg1.getContext(), item_7.class ); startActivity(intent); break;
case 7: intent.setClass(arg1.getContext(), item_8.class ); startActivity(intent); break;
case 8: intent.setClass(arg1.getContext(), item_9.class ); startActivity(intent); break;
case 9: intent.setClass(arg1.getContext(), item_10.class ); startActivity(intent); break;


}}}
);

}}



و اینم لایوت جست و جو:

<?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="fill_parent"
android:orientation="vertical"
android:background="@drawable/background_5">

<!-- Editext for Search -->
<EditText android:id="@+id/inputSearch"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:hint="Search products.."
android:inputType="textVisiblePassword"/>

<!-- List View -->
<ListView
android:id="@+id/list_view"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:divider="@null"
android:dividerHeight="0dp"/>

</LinearLayout>


مشکل: انتقال به اکتیویتی دیگر بعد از انتخاب یکی از آیتم های لیست ویو. به این صورت که:
تا قبل از این که متنی در ادیت تکست (برای جستجو) نوشته بشه: درسته و هر آیتمی که انتخاب بشه به اکتیویتی همون آیتم منتقل میشه. به طور مثال با انتخاب آیتم 10 به اکتیویتی 10 منتقل میشم.
اما بعد از این که متنی در ادیت تکست (برای جست و جو) نوشته بشه: تعداد آیتم ها کاهش پیدا میکنه (مثلا اگه 2 آیتم باقی بمونه) و همون آیتمی که قبل جست و جو انتخاب شده بود، انتخاب بشه به اکتیویتی دوم منتقل میشه!! (با این که باید به اکتیویتی 10 منتقل بشه:متفکر:)(امید وارم منظورمو فهمیده باشید)

مشکل از کجاست؟:لبخند:

Amin-rz
سه شنبه 25 شهریور 1393, 18:38 عصر
من تو کد شما قسمتی برای جستجو نمی بینم.
ولی برای مشکلی که گفتید راه حلش اینه که تو onItemclickListener اینطوری شرط بذارید:

if(adapter.getItem(arg2).equals("آیتم 1"))
intent.setClass(arg1.getContext(), item_1.class ); startActivity(intent);

esmail3309
سه شنبه 25 شهریور 1393, 20:40 عصر
ممنون دوست عزز
کدمو اینطوری کامل کردم:



public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
Intent intent = new Intent();
switch(arg2){

case 0:if(adapter.getItem(arg2).equals("item1"))
intent.setClass(arg1.getContext(), tozihat_1.class ); startActivity(intent); break;


case 1:if(adapter.getItem(arg2).equals("item2"))
intent.setClass(arg1.getContext(), tozihat_2.class ); startActivity(intent); break;


case 2:if(adapter.getItem(arg2).equals("item3"))
intent.setClass(arg1.getContext(), tozihat_3.class ); startActivity(intent); break;

}}}
);



اما بعد از جستجو هر گزینه ای رو که انتخاب میکنم (به جز گزینه ی اول) برنامه کرش میشه!!

میشه راهنمایی کنید؟

Amin-rz
سه شنبه 25 شهریور 1393, 21:35 عصر
خب حق داره كرش مي كنه :لبخند:
به جاي
item1 , . . . , item10
اينا رو بذار:
products[0] , . . . , products[9]

Amin-rz
سه شنبه 25 شهریور 1393, 21:54 عصر
یعنی اینطوری:

case 0:if(adapter.getItem(arg2).equals(products[0]))
intent.setClass(arg1.getContext(), tozihat_1.class ); startActivity(intent); break;


case 1:if(adapter.getItem(arg2).equals(products[1]))
intent.setClass(arg1.getContext(), tozihat_2.class ); startActivity(intent); break;


case 2:if(adapter.getItem(arg2).equals(products[2]))
intent.setClass(arg1.getContext(), tozihat_3.class ); startActivity(intent); break;

Amin-rz
سه شنبه 25 شهریور 1393, 21:58 عصر
یه سوال؟منم از همین روش برای جستجو استفاده می کنم.چون با امولاتور کار می کنم و فقط می تونم انگلیسی تایپ کنم,
اگه لیست آیتم هام انگلیسی باشه تست کردم جواب داده و کلمه جستجو شده رو به درستی سرچ می کنه ولی وقتی لیست آیتم ها فارسی باشه چون نمی تونم فارسی تایپ کنم با امولاتور نمی دونم جواب میده سرچ یا نه!!!؟
شما فارسی امتحان کردید؟

esmail3309
چهارشنبه 26 شهریور 1393, 08:35 صبح
خب من کدم رو اینجوری هم که کامل میکنم بازم کرش میکنه



final String products[] = {


"item 1",
"item 2",
"item 3",



};

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


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


lv.setAdapter(adapter);
lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {



public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
Intent intent = new Intent();
switch(arg2){

case 0:if(adapter.getItem(arg2).equals(products[0]))
intent.setClass(arg1.getContext(), tozihat_1.class ); startActivity(intent); break;


case 1:if(adapter.getItem(arg2).equals(products[1]))
intent.setClass(arg1.getContext(), tozihat_2.class ); startActivity(intent); break;


case 2:if(adapter.getItem(arg2).equals(products[2]))
intent.setClass(arg1.getContext(), tozihat_3.class ); startActivity(intent); break;




}}}
);


راستی روی گوشیم آزمایش کردم، فارسی هم جست و جو میکنه

Amin-rz
چهارشنبه 26 شهریور 1393, 09:24 صبح
بدون سوييچ كيس بذار.
اگه باز كرش كرد ديگه بايد ارور لاگ كت رو بذاري ببينيم چي شده.

if(adapter.getItem(arg2).equals(products[0]))
{
intent.setClass(arg1.getContext(), tozihat_1.class ); startActivity(intent);

}
else
if(adapter.getItem(arg2).equals(products[1]))
{
intent.setClass(arg1.getContext(), tozihat_2.class ); startActivity(intent);

}

else
if(adapter.getItem(arg2).equals(products[2]))
{
intent.setClass(arg1.getContext(), tozihat_3.class ); startActivity(intent);
}

esmail3309
چهارشنبه 26 شهریور 1393, 10:28 صبح
دمت گرم داداش درست شد
150 تا آیتم زدم. :گیج:داغوون شدم

majnoon110
چهارشنبه 26 شهریور 1393, 10:36 صبح
وقت بذار با دیتابیس کار کن
اینطوری راحت تری
توی کارای بعدیت جلو میفتی

darkhah1
یک شنبه 12 اردیبهشت 1395, 16:43 عصر
سلام اگه نه واسه دیتابیس بخوای و نه اکتویتی چی؟؟؟ من می خوام سرچ بزنم که با string کار کنه؟؟؟؟ چیکار کنم