رفتن به مطلب
انجمن اندروید ایران | آموزش برنامه نویسی اندروید و موبایل
  • android.png.1fab383bc8500cd93127cebc65b1dcab.png

مشکل در لیست ویو سفارشی


پست های پیشنهاد شده

سلام 

اول از همه از دوستانی که کمک میکنن و پاسخ میدن ممنونم.

دوستان چند روز دارم میگردم و راه حلی برای مشکلم پیدا نکردم

من یه لیست ویو سفارشی ساختم که TextView و یه Button تو هر ردیف داره مشکل اینجاست که با اسکرول کردن جای Position ها تغییر میکنه .

و یه چیز دیگه که متوجه شدم  تو موبایلم 15 تا ردیف(تو موبایل تست میکنم) جا میگیره و از ردیف 16 پزیشن صفر بعد یک به ترتیب تا اخرین پزیشن و وقتی اسکرول میکنم اون قسمت هایی که از صفحه خارج میشه پوزیشنش تغییر میکنه.

وقطی از setOnItemClickListener  استفاده میکنم ردیف های تکست درست میشه ولی باتون های هنوز همون مشکل رو دارن

از android studio استفاده میکنم

  ممنون میشم راهنمایی کنین اینقد گشتم خسته شدم

MainActivity

package com.beautisale.listview;

import android.content.Context;
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ListView;
import android.widget.RelativeLayout;
import android.widget.TextView;
import android.widget.Toast;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;


public class MainActivity extends AppCompatActivity  {
   private ArrayList data = new ArrayList();

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


       ListView  list = (ListView) findViewById(R.id.listView);
         list.setAdapter(new Customlist(this, R.id.button, R.id.textView, getResources().getStringArray(R.array.storys)));
   }


   public class Customlist extends ArrayAdapter{
       viewHolder mainViewHolder = new viewHolder();
       private int layout;
       public Customlist(Context context, int resource, int textViewResourceId, String[] objects) {
           super(context, resource, textViewResourceId, objects);
           layout=resource;
       }

       @Override
       public View getView(final int position, View convertView,  ViewGroup parent) {
           final viewHolder viewHolder ;
           if (convertView == null) {
               viewHolder= new viewHolder();
               String[] str = getResources().getStringArray(R.array.storys);
               LayoutInflater inflater = (LayoutInflater) getSystemService(getContext().LAYOUT_INFLATER_SERVICE);
               convertView = inflater.inflate(R.layout.custom, null);
               viewHolder.text1 = (TextView) convertView.findViewById(R.id.textView);
               viewHolder.btn = (Button) convertView.findViewById(R.id.button);
               viewHolder.btn.setText(str[position]);
               viewHolder.text1.setText(str[position]);
               viewHolder.text1.setOnClickListener(new View.OnClickListener() {
                   @Override
                   public void onClick(View v) {
                       Toast.makeText(getContext(),"click "+position,Toast.LENGTH_SHORT).show();

                   }
               });
               viewHolder.btn.setOnClickListener(new View.OnClickListener() {
                   @Override
                   public void onClick(View v) {
                       Toast.makeText(getContext(),"bclick "+position,Toast.LENGTH_SHORT).show();
                   }
               });
               convertView.setTag(viewHolder);
           }
           else {

               viewHolder = (viewHolder) convertView.getTag();
               viewHolder.btn.setText(getItem(position));
               viewHolder.text1.setText(getItem(position));
           }
           return convertView;
       }
       }
   class viewHolder {
       TextView text1;
       Button btn;
   }
}

Custom

<?xml version="1.0" encoding="utf-8"?>
    android:layout_width="match_parent"
   android:layout_height="match_parent"
   android:descendantFocusability="blocksDescendants">

           android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:text="New Button"
       android:id="@+id/button"
       android:layout_alignParentTop="true" />

           android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:textAppearance="?android:attr/textAppearanceMedium"
       android:text="Medium Text"
       android:id="@+id/textView"
       android:layout_toRightOf="@+id/button"
       android:layout_alignParentTop="true"
       android:layout_alignParentRight="true"
       android:layout_alignParentEnd="true"
       android:layout_alignBottom="@+id/button" />

Activity_Main

<?xml version="1.0" encoding="utf-8"?>
   xmlns:tools="http://schemas.android.com/tools"
   android:layout_width="match_parent"
   android:layout_height="match_parent"

   >

           android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:id="@+id/listView"
       android:layout_centerVertical="true"
       android:layout_alignParentLeft="true"
       android:layout_alignParentStart="true" />

storys

<?xml version="1.0" encoding="utf-8"?>


   
       داستان 1
       داستان 2
       داستان 3
       داستان 4
       داستان 5
       داستان 6
       داستان 7
       داستان 8
       داستان 9
       داستان 10
       داستان 11
       داستان 12
       داستان 13
       داستان 14
       داستان 15
       داستان 16
       داستان 17
       داستان 18
       داستان 19
       داستان 20
       داستان 21
       داستان 22
       داستان 23
       داستان 24
       داستان 25





   

لینک ارسال
به اشتراک گذاری در سایت های دیگر

دوستان مشکل هنوز پا برجاست کسی دیگه ایده ای نداره ؟

اگر یکی باشه که کامل توضیح بده کار کرد متد ها هم عالی میشه یا آموزش لیست ویوی سقارشی رو بزاره ممنون میشم

لینک ارسال
به اشتراک گذاری در سایت های دیگر

سلام 

اول از همه از دوستانی که کمک میکنن و پاسخ میدن ممنونم.

دوستان چند روز دارم میگردم و راه حلی برای مشکلم پیدا نکردم

من یه لیست ویو سفارشی ساختم که TextView و یه Button تو هر ردیف داره مشکل اینجاست که با اسکرول کردن جای Position ها تغییر میکنه .

و یه چیز دیگه که متوجه شدم  تو موبایلم 15 تا ردیف(تو موبایل تست میکنم) جا میگیره و از ردیف 16 پزیشن صفر بعد یک به ترتیب تا اخرین پزیشن و وقتی اسکرول میکنم اون قسمت هایی که از صفحه خارج میشه پوزیشنش تغییر میکنه.

وقطی از setOnItemClickListener  استفاده میکنم ردیف های تکست درست میشه ولی باتون های هنوز همون مشکل رو دارن

از android studio استفاده میکنم

  ممنون میشم راهنمایی کنین اینقد گشتم خسته شدم

MainActivity

package com.beautisale.listview;

import android.content.Context;
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ListView;
import android.widget.RelativeLayout;
import android.widget.TextView;
import android.widget.Toast;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;


public class MainActivity extends AppCompatActivity  {
   private ArrayList data = new ArrayList();

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


       ListView  list = (ListView) findViewById(R.id.listView);
         list.setAdapter(new Customlist(this, R.id.button, R.id.textView, getResources().getStringArray(R.array.storys)));
   }


   public class Customlist extends ArrayAdapter{
       viewHolder mainViewHolder = new viewHolder();
       private int layout;
       public Customlist(Context context, int resource, int textViewResourceId, String[] objects) {
           super(context, resource, textViewResourceId, objects);
           layout=resource;
       }

       @Override
       public View getView(final int position, View convertView,  ViewGroup parent) {
           final viewHolder viewHolder ;
           if (convertView == null) {
               viewHolder= new viewHolder();
               String[] str = getResources().getStringArray(R.array.storys);
               LayoutInflater inflater = (LayoutInflater) getSystemService(getContext().LAYOUT_INFLATER_SERVICE);
               convertView = inflater.inflate(R.layout.custom, null);
               viewHolder.text1 = (TextView) convertView.findViewById(R.id.textView);
               viewHolder.btn = (Button) convertView.findViewById(R.id.button);
               viewHolder.btn.setText(str[position]);
               viewHolder.text1.setText(str[position]);
               viewHolder.text1.setOnClickListener(new View.OnClickListener() {
                   @Override
                   public void onClick(View v) {
                       Toast.makeText(getContext(),"click "+position,Toast.LENGTH_SHORT).show();

                   }
               });
               viewHolder.btn.setOnClickListener(new View.OnClickListener() {
                   @Override
                   public void onClick(View v) {
                       Toast.makeText(getContext(),"bclick "+position,Toast.LENGTH_SHORT).show();
                   }
               });
               convertView.setTag(viewHolder);
           }
           else {

               viewHolder = (viewHolder) convertView.getTag();
               viewHolder.btn.setText(getItem(position));
               viewHolder.text1.setText(getItem(position));
           }
           return convertView;
       }
       }
   class viewHolder {
       TextView text1;
       Button btn;
   }
}

Custom

<?xml version="1.0" encoding="utf-8"?>
    android:layout_width="match_parent"
   android:layout_height="match_parent"
   android:descendantFocusability="blocksDescendants">

           android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:text="New Button"
       android:id="@+id/button"
       android:layout_alignParentTop="true" />

           android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:textAppearance="?android:attr/textAppearanceMedium"
       android:text="Medium Text"
       android:id="@+id/textView"
       android:layout_toRightOf="@+id/button"
       android:layout_alignParentTop="true"
       android:layout_alignParentRight="true"
       android:layout_alignParentEnd="true"
       android:layout_alignBottom="@+id/button" />

Activity_Main

<?xml version="1.0" encoding="utf-8"?>
   xmlns:tools="http://schemas.android.com/tools"
   android:layout_width="match_parent"
   android:layout_height="match_parent"

   >

           android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:id="@+id/listView"
       android:layout_centerVertical="true"
       android:layout_alignParentLeft="true"
       android:layout_alignParentStart="true" />

storys

<?xml version="1.0" encoding="utf-8"?>


   
       داستان 1
       داستان 2
       داستان 3
       داستان 4
       داستان 5
       داستان 6
       داستان 7
       داستان 8
       داستان 9
       داستان 10
       داستان 11
       داستان 12
       داستان 13
       داستان 14
       داستان 15
       داستان 16
       داستان 17
       داستان 18
       داستان 19
       داستان 20
       داستان 21
       داستان 22
       داستان 23
       داستان 24
       داستان 25





   

سلام دوست عزیز

یکی از مشکلاتی که Listview  داره دقیقا همینه . که iموقع Scroll  کردن جابه جا میشه و باید از viewHolder استفاده کنی .

برای اینکه بیشتر مشکل پیدا نکنی از RecyclerView استفاده کن که این مشکل رو توش حل کردن.

لینک ارسال
به اشتراک گذاری در سایت های دیگر

از دوستانی که زحمت میکشن جواب میدن ممنونم

یه سوال چطوری میشه ابجکت ها(مثلا یک BUTTON  یا یک TextView) رو view شون رو دست کاری کرد 

مثلان بعد از ساخته شدن آداپتور و نشون دادن لیستمون حالا میخوایم یکی از Button ها رو مخفی کنیم

(در ضمن نمیشه ابجکت اصلی رو مخفی کرد چون برنامه به هم میریزه مثل کد پایین)

BUTTON btn;
btn = (Button) findViewById(R.id.button);
btn.setVisibility(View.GONE);

لینک ارسال
به اشتراک گذاری در سایت های دیگر

سلام

برای مخفی سازی کافیه با پوزیشن کار کنی

مثلا

if(postion=1)

btn.visible

سلام 

این روش رو امتحان کردم ولی برنامه به هم میریزه فک کنم چون داریم Button اصلی رو مخفی میکنیم و باید به یه روشی به Button ی که اداپتورمون ساخته دسترسی پیدا کنیم و اون مخفی کنیم (امیدوارم منظورمو فهمیده باشین ) 

اگر میشد تو اداپترمون تعریف کنیم که برا هریک از دکمه ها یه ایدی مشخص بده که بعد بتونیم با R.id بهش دسترسی پیدا کنیم هم عالی میشد

لینک ارسال
به اشتراک گذاری در سایت های دیگر

سلام

برای مخفی سازی کافیه با پوزیشن کار کنی

مثلا

if(postion=1)

btn.visible

سلام 

این روش رو امتحان کردم ولی برنامه به هم میریزه فک کنم چون داریم Button اصلی رو مخفی میکنیم و باید به یه روشی به Button ی که اداپتورمون ساخته دسترسی پیدا کنیم و اون مخفی کنیم (امیدوارم منظورمو فهمیده باشین ) 

اگر میشد تو اداپترمون تعریف کنیم که برا هریک از دکمه ها یه ایدی مشخص بده که بعد بتونیم با R.id بهش دسترسی پیدا کنیم هم عالی میشد

ربطی نداره که باتون اصلیه !!

علاقه مندی ها و ... هم به همین شکل هست !! یک باتونه ! با استفاده از مقدار پوزیشن قلب رنگش قرمز و سفید میشه !!

همون روش رو میتونی برای ویسیبل به کار ببری !!

برنامه که بهم میریزه سره لیست ویو شماست .

من نمونه سورس کد دادم بت ! دانلود کن ! از همون استفاده کن !! اینی که شما داری استفاده میکنی مبتدیانه است .

موفق باشید

لینک ارسال
به اشتراک گذاری در سایت های دیگر

به گفتگو بپیوندید

هم اکنون می توانید مطلب خود را ارسال نمایید و بعداً ثبت نام کنید. اگر حساب کاربری دارید، برای ارسال با حساب کاربری خود اکنون وارد شوید .

مهمان
ارسال پاسخ به این موضوع...

×   شما در حال چسباندن محتوایی با قالب بندی هستید.   حذف قالب بندی

  تنها استفاده از 75 اموجی مجاز می باشد.

×   لینک شما به صورت اتوماتیک جای گذاری شد.   نمایش به صورت لینک

×   محتوای قبلی شما بازگردانی شد.   پاک کردن محتوای ویرایشگر

×   شما مستقیما نمی توانید تصویر خود را قرار دهید. یا آن را اینجا بارگذاری کنید یا از یک URL قرار دهید.

×
×
  • اضافه کردن...