View Full Version : مقدار textview در listview
  
mfaridi
یک شنبه 17 آذر 1392, 12:11 عصر
به یه مشکل برخوردم اساسی
من میخوام مقدار textview در listview رو تغیر بدم تغیر پیدا میکنه ولی مشکلی که هست وقتیlistview رو بالا و پایین میکنی و همون ایتمی که تغیر دادیم از صفحه خارج شه مقدار textview دباره مثل اول میشه ممنون میشم اموزش یا لینکی یا نمونه ای در این مورد بدی ممنون
arash_saye
یک شنبه 17 آذر 1392, 12:57 عصر
سوالتون یه کم کنگه
توی تکست چی قرار می گیره؟
یعنی چطور میره بیرون
shahin bahari
یک شنبه 17 آذر 1392, 12:58 عصر
مقدار های list view هر موقع که آپدیت بشه (دوباره باز بشه و یا اسکرول کنید و ایتم های جدید صدا بشه) تابع getView داخل آداپتر اون رو صدا میکنه و اون جا مقادیر وارد میشن. احتمالا شما به جای اینکه کاری کنید که مقدار از داخل این تابع تغییر کنه فقط مقدار ویو رو دستی تغییر دادید  و وقتی لیست نیاز پیدا میکنه که آپدیت بشه دوباره میشه مثل قبل! کدتون رو بزارید تا بشه گفت دقیقا کجا رو اصلاح کنید.
mfaridi
یک شنبه 17 آذر 1392, 13:20 عصر
@Override
		public View getView(final int position, View convertView, ViewGroup parent) {
		    
			// 1. Create inflater 
			LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_S ERVICE);
		    
			// 2. Get rowView from inflater
			View rowView = inflater.inflate(R.layout.row, parent, false);
		    
			// 3. Get the two text view from the rowView
			 final TextView labelView = (TextView) rowView.findViewById(R.id.label1);
		    TextView valueView = (TextView) rowView.findViewById(R.id.value1);
		    labelView.setText(itemsArrayList.get(position).get Title());
		    labelView.setOnClickListener(new OnClickListener() {
				
				@Override
				public void onClick(View v) {
				    labelView.setText("mm");			    
				}
			});
		    return rowView;
		}
shahin bahari
یک شنبه 17 آذر 1392, 13:32 عصر
ببینید شما تو متد onClick اومدید و مقدار textView  رو مستقیما تغییر دادید ولی وقتی اسکرول میکنید و دوباره متد getView صدا میشه از توی لیست یه متنی خونده میشه و به این textView داده میشه! دلیل تغییرش این هست. اگر میخواید مقدار بمونه باید متن داخل لیست رو هم داخل متد onClick تغییر بدید.
mfaridi
یک شنبه 17 آذر 1392, 13:35 عصر
میشه کد بالا رو ویرایش کنید تا متوجه شم ممنون
shahin bahari
یک شنبه 17 آذر 1392, 13:44 عصر
itemsArrayList.set(position,"mm");
این خط رو توی متد onClick اضافه کنید تا مقدار متن آپدیت شه.
http://stackoverflow.com/questions/4352885/how-do-i-update-the-element-at-a-certain-position-in-an-arraylist
mfaridi
یک شنبه 17 آذر 1392, 14:03 عصر
ببخشید ولی من همین خط زا اضافه کردم ارور میده
				public void onClick(View v) {
				    itemsArrayList.set(position, "Tanks");			    
				}
خط قرمز رو set هست
shahin bahari
یک شنبه 17 آذر 1392, 20:40 عصر
برنامه رو کامل براتون نوشتم:
package com.example.listtest;
import java.util.ArrayList;
import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.TextView;
public class MainActivity extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ArrayList<String> arr = new ArrayList<String>();
        for (int i = 0; i < 100; i++) {
            arr.add("item " + i);
        }
        ListView lv = (ListView) findViewById(R.id.listView1);
        MyAdapter adapter = new MyAdapter(this, arr);
        lv.setAdapter(adapter);
    }
    private class MyAdapter extends ArrayAdapter<String> {
        ArrayList<String> lst;
        Context context;
        public MyAdapter(Context context, ArrayList<String> objects) {
            super(context, R.layout.list_item, R.id.textView1, objects);
            lst = new ArrayList<String>();
            lst = objects;
            this.context = context;
            // TODO Auto-generated constructor stub
        }
        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            View v = convertView;
            final int pos = position;
            if (v == null) {
                LayoutInflater inf = (LayoutInflater) context
                        .getSystemService(Context.LAYOUT_INFLATER_SERVICE) ;
                v = inf.inflate(R.layout.list_item, parent, false);
                final TextView tv = (TextView) v.findViewById(R.id.textView1);
                tv.setText(lst.get(position));
                tv.setOnClickListener(new OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        // TODO Auto-generated method stub
                        lst.set(pos, "new Text");
                        tv.setText(lst.get(pos));
                    }
                });
            }
            return v;
        }
    }
}
mfaridi
یک شنبه 17 آذر 1392, 21:09 عصر
ممنون :قلب:
 
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.