انجمن سایت کلیدستان



کمک فوری آرایه آداپترزمان کنونی: ۱۳۹۵/۰۹/۲۱، ۰۶:۵۵ ق.ظ
کاربران در حال بازدید این موضوع: 1 مهمان
نویسنده: saeed.f436
آخرین ارسال: saeed.f436
پاسخ 3
بازدید 480

رتبه موضوع:
  • 1 رای - 5 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
کمک فوری آرایه آداپتر

کمک فوری آرایه آداپتر

#1
من یه اکتیویتی جستجو دارم که توش لیست ویو رو وقتی فیلتر میکنم مقدار موقعیت اشتباهی به من میده میخام موقعیت درست رو به انتنت بفرستم که به اکتیویتی دوم بره اگه بدون جستجو آیتم رو انتخاب کنم درست کار میکنه اما وقتی جسجو میکنم و فیتلر میکنه نه مثله انتخاب در حالت غیر فیلتر کار میکنه
بابا من هرچی سوال میپرسم هیچکی جواب نمیده تنها امیدم شمایید 3 روزه گیر فقط این یه ذره ام
کد پی‌اچ‌پی:
package com.example.medic;

import android.app.ListActivity;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.preference.PreferenceManager;
import android.text.Editable;
import android.text.TextWatcher;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ArrayAdapter;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.Toast;

public class 
Ravan1 extends ListActivity {
    public 
int Subjects_total_number;
    public 
String[] Subjects;
    
ListView lv;
    public 
ArrayAdapter<Stringadapter;
    
EditText ed;
    
SharedPreferences full;

    @
Override
    
protected void onCreate(Bundle savedInstanceState) {
        
super.onCreate(savedInstanceState);
        
screnpref();
        
setContentView(R.layout.a_ravan1);
        
Subjects = new String[200];
        for (
int x 1200 11) {
            
String this_subject "ravan1_" String.valueOf(x);
            
int resID getResources().getIdentifier(this_subject"string",
                    
getPackageName());
            
Subjects[1] = getResources().getString(resID);
        }
        
adapter = new ArrayAdapter<String>(this,
                
android.R.layout.simple_list_item_1Subjects);
        
setListAdapter(adapter);
        
ed = (EditTextfindViewById(R.id.edtsearchr1);
        
lv = (ListViewfindViewById(android.R.id.list);
        
lv.setTextFilterEnabled(true);

        
ed.addTextChangedListener(new TextWatcher() {

            @
Override
            
public void onTextChanged(CharSequence arg0int arg1int arg2,
                    
int arg3) {
                
setListAdapter(adapter);
            }

            @
Override
            
public void beforeTextChanged(CharSequence arg0int arg1,
                    
int arg2int arg3) {
                
setListAdapter(adapter);
            }

            @
Override
            
public void afterTextChanged(Editable arg0) {
                
Ravan1.this.adapter.getFilter().filter(arg0);
                
setListAdapter(adapter);
            }
        });

        
lv.setOnItemClickListener(new OnItemClickListener() {

            @
Override
            
public void onItemClick(AdapterView<?> parent, View view,
                    int position, long id) {

                Intent i = new Intent(getApplicationContext(), Secendr1.class);
                //این خط مشکل من هستش موقعیت رو میفرسته و تو اکتیویتی دوم دریافت میشه اما 
                String Subject_number = String.valueOf(position + 1);
                i.putExtra("subject_number", Subject_number);
                startActivity(i);

                Toast.makeText(getApplicationContext(), position + 1,
                        Toast.LENGTH_SHORT).show();
            }
        });
    }

    private void screnpref() {
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        full = PreferenceManager.getDefaultSharedPreferences(getBaseContext());
        boolean lab = full.getBoolean("swich_full_pref", true);
        if (lab == true) {
            requestWindowFeature(Window.FEATURE_NO_TITLE);
            getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
                    WindowManager.LayoutParams.FLAG_FULLSCREEN);
        }
        if (lab == false) {
            requestWindowFeature(Window.FEATURE_NO_TITLE);
            getWindow().setFlags(
                    WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN,
                    WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN);
        }

    }


یا اصلا یه جایی هست که بشینم این آرایه آداپتر ها رو مثه آدم بخونم معرفی کنید.
ممنون بازم
:|
پاسخ

کمک فوری آرایه آداپتر

#2
دوست عزیز شما آرایه آداپتر به درستی نوشتید و مشکلی نیست..مشکل شما توی قسمت onItemClickLisnteaner هست..
ببینید ایراد شما فرستادن متغییر position  به عنوان پارامتر به اکتیویتی دیگر است .
این متغییر وابسته به لیست ویو شما هست..و مقدار آن همیشه به صورت اتوماتیک و وابسته بهه تعداد آیتم ها  از صفر شروع میشه میره به بالا.مقدار دهی میشود

مثلا فرض کنید لیست ویو شما 10 تا آیتم داره که اسم هر کدام به ترتیب a0, a1,a2,a3, a4,a5..... است ..و اون در یک لیست ویو نمایش میدهیم.
و میخواهیم برای a0 جمله صفرم ، برای   a1 جمله اول   برای a2 جمله دوم و....در اکتیویتی دوم نمایش دهیم.

حالا وقتی این لیست ویو نمایش داده میشود. مقدار position به صورت اتوماتیک به ترتیب برای
a0  مقدار 0
a1 مقدار  1
.
.
.
ست میشود.و وقتی شما کلیک میکنید بر ایتم a1  مقدار یک به اکیتیوتی دیگر فرستاده میشود و جمله اول نمایش داده میشود. و به درستی کار میکند.
اما

 وقتی شما عبارت سرچ رو استفاده میکنید مشکل بوجود می آید..به این صورت که

فرض کنید کاربر بعد از جستجوی عبارتی ،   سه آیتم a2 , a4 , a6 فیلتر شد و در لیست ویو نمایش داده شد..یعنی از 10 ایتم 3 آیتم فقط نتیجه جستجو بود.
پس لیست ویو شما دوباره از اول میاد مقادیر position به صورت اتوماتیک از صفر شروع میکند مقدار دهی میکند .یعنی برای
a2 مقدار 0
a4 مقدار 1
a6 مقدار 2
اینجاست که شما وقتی روی a2 کلیک میکنید بجای آنکه جمله دوم نمایش داده شود ..مقدار 0(مقدار position ) به اکتیویتی بعدی فرستاده میشود و جمله صفرم رو نشان میدهد.
پس با این تفاسیر شما نباید با position  برای تشخیص کدام جمله نمایش داده شود استفاده کنید.

روش درست:

گام اول: شما باید عنوان لیست ویو رو در یک آرایه Subjects بریزید.  و دو آرایه هم به نام ID و ID_TMP تعریف کنید و مقادیر 1و2 و3 و 4و ........برایش مقدار دهی کنید.(آرایه ID_TMP یک آرایه کمکی است)
 بعد متد سرچ رو بازنویسی کنید.یعنی
کد پی‌اچ‌پی:
public void onTextChanged(CharSequence sint startint beforeint count) {
         if (!
s.toString().equals("")) {
              List<
TitlefilteredTitles = new ArrayList<Title>();
             
int j=0;
              for (
int i=0i<titles.size(); i++) {
                   if (
titles.get(i).toString().contains(s)) {
                       
filteredTitles.add(titles.get(i));  
                       
ID[j]=ID_TMP[i];  
                                      
                   }            
              }
              
adapter = new TitleListingArrayAdapter(TitleListingActivity.thisR.id.list, filteredTitles);
              
listView.setAdapter(adapter);
         }
         else {
              
adapter = new TitleListingArrayAdapter(TitleListingActivity.thisR.id.list, titles);
              
listView.setAdapter(adapter);             
         } 
این متد میاد وقتی تا کاربر یک حرف جدید  در باکس جستجو   وارد میکند،   چک میکنه این حرف در کدام آیتم وجود دارد  اگر وجود داشت آن رو اضافه میکنه به filterTitle
و همچنین ID رو هم مقادیرش آپدیت میکنه و دوباره میسازه با کمک ID_TMP.
حالا کافیه برای اساس این آرایه جمله ها رو تشخیص بدید.
کد پی‌اچ‌پی:
i.putExtra("subject_number"ID[position]); 
دوست عزیز من سعی کردم اول دیده شما رو بازکنم به اینکه مشکل از چیست و ثانیا راهکار به شما بگم..
فقط با روشن شدن مطلب برایتان .کدها رو براساس سلیقه خودتون تغییر بدید.من کدها رو به صورت دستی وارد کردم .و چک نکردم آن را .ولی ساختار کلی آن همین است .امتحان کنید

 
پاسخ
 سپاس شده توسط saeed.f436

کمک فوری آرایه آداپتر

#3
(۱۳۹۴/۰۵/۰۱, ۰۳:۵۲ ق.ظ)'داش بهروز' نوشته: دوست عزیز شما آرایه آداپتر به درستی نوشتید و مشکلی نیست..مشکل شما توی قسمت onItemClickLisnteaner هست..
ببینید ایراد شما فرستادن متغییر position  به عنوان پارامتر به اکتیویتی دیگر است .
این متغییر وابسته به لیست ویو شما هست..و مقدار آن همیشه به صورت اتوماتیک و وابسته بهه تعداد آیتم ها  از صفر شروع میشه میره به بالا.مقدار دهی میشود

مثلا فرض کنید لیست ویو شما 10 تا آیتم داره که اسم هر کدام به ترتیب a0, a1,a2,a3, a4,a5..... است ..و اون در یک لیست ویو نمایش میدهیم.
و میخواهیم برای a0 جمله صفرم ، برای   a1 جمله اول   برای a2 جمله دوم و....در اکتیویتی دوم نمایش دهیم.

حالا وقتی این لیست ویو نمایش داده میشود. مقدار position به صورت اتوماتیک به ترتیب برای
a0  مقدار 0
a1 مقدار  1
.
.
.
ست میشود.و وقتی شما کلیک میکنید بر ایتم a1  مقدار یک به اکیتیوتی دیگر فرستاده میشود و جمله اول نمایش داده میشود. و به درستی کار میکند.
اما

 وقتی شما عبارت سرچ رو استفاده میکنید مشکل بوجود می آید..به این صورت که

فرض کنید کاربر بعد از جستجوی عبارتی ،   سه آیتم a2 , a4 , a6 فیلتر شد و در لیست ویو نمایش داده شد..یعنی از 10 ایتم 3 آیتم فقط نتیجه جستجو بود.
پس لیست ویو شما دوباره از اول میاد مقادیر position به صورت اتوماتیک از صفر شروع میکند مقدار دهی میکند .یعنی برای
a2 مقدار 0
a4 مقدار 1
a6 مقدار 2
اینجاست که شما وقتی روی a2 کلیک میکنید بجای آنکه جمله دوم نمایش داده شود ..مقدار 0(مقدار position ) به اکتیویتی بعدی فرستاده میشود و جمله صفرم رو نشان میدهد.
پس با این تفاسیر شما نباید با position  برای تشخیص کدام جمله نمایش داده شود استفاده کنید.

روش درست:

گام اول: شما باید عنوان لیست ویو رو در یک آرایه Subjects بریزید.  و دو آرایه هم به نام ID و ID_TMP تعریف کنید و مقادیر 1و2 و3 و 4و ........برایش مقدار دهی کنید.(آرایه ID_TMP یک آرایه کمکی است)
 بعد متد سرچ رو بازنویسی کنید.یعنی
کد پی‌اچ‌پی:
public void onTextChanged(CharSequence sint startint beforeint count) {
         if (!
s.toString().equals("")) {
              List<
TitlefilteredTitles = new ArrayList<Title>;();
             
int j=0;
              for (
int i=0i<titles.size(); i++) {
                   if (
titles.get(i).toString().contains(s)) {
                       
filteredTitles.add(titles.get(i));  
                       
ID[j]=ID_TMP[i];  
                                      
                   }            
              }
              
adapter = new TitleListingArrayAdapter(TitleListingActivity.thisR.id.list, filteredTitles);
              
listView.setAdapter(adapter);
         }
         else {
              
adapter = new TitleListingArrayAdapter(TitleListingActivity.thisR.id.list, titles);
              
listView.setAdapter(adapter);             
         }[/
i
این متد میاد وقتی تا کاربر یک حرف جدید  در باکس جستجو   وارد میکند،   چک میکنه این حرف در کدام آیتم وجود دارد  اگر وجود داشت آن رو اضافه میکنه به filterTitle
و همچنین ID رو هم مقادیرش آپدیت میکنه و دوباره میسازه با کمک ID_TMP.
حالا کافیه برای اساس این آرایه جمله ها رو تشخیص بدید.
کد پی‌اچ‌پی:
[ii.putExtra("subject_number"ID[position]);[/i
دوست عزیز من سعی کردم اول دیده شما رو بازکنم به اینکه مشکل از چیست و ثانیا راهکار به شما بگم..
فقط با روشن شدن مطلب برایتان .کدها رو براساس سلیقه خودتون تغییر بدید.من کدها رو به صورت دستی وارد کردم .و چک نکردم آن را .ولی ساختار کلی آن همین است .امتحان کنید

 




واقعا ممنون 

ولی جسارته جسارته چون من خیلی خیلی نوبم میشه تو کدای خودم  بگی چطوری اونا رو تعریف کنم با زم معذرت.
بازم ممنون خیلی مچکر.
این پروژه رو هم پیدا کردم ولی خیلی پیشرفتسو...

 


فایل‌های پیوست

دانلود list.zip

نام فایل list.zip
نوع فایل .zip
دفعات دانلود 17
اندازه 729.61 KB
ارسال کننده فایل saeed.f436
پاسخ


پرش به انجمن:


کاربران در حال بازدید این موضوع: 1 مهمان

آخرین کلیدهای غیررایگان

شما هم می توانید کلیدهای غیررایگان منتشر کنید (بیشتر بدانید)