ورود

View Full Version : مقدار textview در listview



mfaridi
یک شنبه 17 آذر 1392, 11:11 صبح
به یه مشکل برخوردم اساسی
من میخوام مقدار textview در listview رو تغیر بدم تغیر پیدا میکنه ولی مشکلی که هست وقتیlistview رو بالا و پایین میکنی و همون ایتمی که تغیر دادیم از صفحه خارج شه مقدار textview دباره مثل اول میشه ممنون میشم اموزش یا لینکی یا نمونه ای در این مورد بدی ممنون

arash_saye
یک شنبه 17 آذر 1392, 11:57 صبح
سوالتون یه کم کنگه
توی تکست چی قرار می گیره؟
یعنی چطور میره بیرون

shahin bahari
یک شنبه 17 آذر 1392, 11:58 صبح
مقدار های list view هر موقع که آپدیت بشه (دوباره باز بشه و یا اسکرول کنید و ایتم های جدید صدا بشه) تابع getView داخل آداپتر اون رو صدا میکنه و اون جا مقادیر وارد میشن. احتمالا شما به جای اینکه کاری کنید که مقدار از داخل این تابع تغییر کنه فقط مقدار ویو رو دستی تغییر دادید و وقتی لیست نیاز پیدا میکنه که آپدیت بشه دوباره میشه مثل قبل! کدتون رو بزارید تا بشه گفت دقیقا کجا رو اصلاح کنید.

mfaridi
یک شنبه 17 آذر 1392, 12: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, 12:32 عصر
ببینید شما تو متد onClick اومدید و مقدار textView رو مستقیما تغییر دادید ولی وقتی اسکرول میکنید و دوباره متد getView صدا میشه از توی لیست یه متنی خونده میشه و به این textView داده میشه! دلیل تغییرش این هست. اگر میخواید مقدار بمونه باید متن داخل لیست رو هم داخل متد onClick تغییر بدید.

mfaridi
یک شنبه 17 آذر 1392, 12:35 عصر
میشه کد بالا رو ویرایش کنید تا متوجه شم ممنون

shahin bahari
یک شنبه 17 آذر 1392, 12: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, 13:03 عصر
ببخشید ولی من همین خط زا اضافه کردم ارور میده

public void onClick(View v) {
itemsArrayList.set(position, "Tanks");
}
خط قرمز رو set هست

shahin bahari
یک شنبه 17 آذر 1392, 19: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, 20:09 عصر
ممنون :قلب: