بروز خطا
   [message]
اشتراک در سوال
رای ها
[dataList]
پرسش و پاسخ

آپديت كردن يك آيتم در ليست ويوو

مدیریت گفتگو
sadra 11 سال پیش
آخرین تغییر: 10 سال پیش

به يه مشكل برخوردم، ميخوام وقتي مقدار يكي از آيتم ها در ليست ويوو تغيير كرد، اون مقدار در ليست ويوو آپديت بشه، بدون اينكه ليست وئوو بخواد دوباره بارگذاري بشه يا اسكرول بشه، كسي راحي بلده؟

نظرات

احسان منصوری 11 سال پیش
این آیتم رو دستی تغییر میدین یا از سمت سرور تغییر می کنه؟ اگه دستی تغییر میدین، آیا دکمه دارین واسه اعمال تغییرات؟ میتونین هنگام اعمال تغییرات، آرایه رو clean و لیست رو notify کنید
Mr7 11 سال پیش
سلام. میتونید. از یک thread استفاده کنید که هر وقت تغییری اتفاق افتاد arraylist ی که از اون لیست ویو داره خونده میشه رو آبدیت کنه و اون رو notify کنه.
sadra 11 سال پیش
mohammad جان اين threat گه گفتي رو چجوري بسازم؟ يه سمپل ميشه بدي؟
sadra 11 سال پیش
احسان عزيز، تغيير كه نميكنه اما اكتيويتي كه ران ميشه خوب بلافاصله آرايه پر ميشه و ليست ويئو بالا مياد اما تا عكسا لود بشه طولميكشه ديگه. ميخوام وتي كار عكسا تموم شد اين imageview توي آرايه رفرش بشه به مقدار جديدي كه گرفته

پاسخ‌ها 3

Mr7 11 سال پیش

 
 وقتی آرایه تغییر بکنه لیست ویو تغییر میکنه بعد از 5 ثانیه .

Thread thread = new Thread(new Runnable() {

@Override
public void run() {

while (true) {
try {

Thread.sleep(5000);
G.HANDLER.post(new Runnable() {

@Override
public void run() {

adapter.notifyDataSetChanged();

}
});

}
catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}

});

thread.start();



نظرات

sadra 11 سال پیش
مرشس ولي اينو كجا بايد بگذارم؟ توي خود GetView ؟
sadra 11 سال پیش
دقيقا اينو باس كجا بگذارم؟
Mr7 11 سال پیش
توی اون اکتیویتی که لیست ویو توش گذاشتی...
sadra 11 سال پیش
ايني كه گفتيدو گذاشتم اما چندتا اررور ميده!
sadra 11 سال پیش

ببينيد اين كد منه:

 com.example.blog

import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.URL;
import java.net.URLConnection;
import java.net.URLEncoder;
import java.util.Arrays;
import android.support.v7.app.ActionBarActivity;
import android.text.Html;
import android.app.ProgressDialog;
import android.content.Context;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnFocusChangeListener;
import android.view.ViewGroup;
import android.view.View.OnClickListener;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ImageButton;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.SearchView;
import android.widget.SearchView.OnQueryTextListener;
import android.widget.TextView;
import android.widget.Toast;
import android.widget.AdapterView.OnItemClickListener;

public class Magazine extends ActionBarActivity {

private ListView lv;
String[] id,title,content,commect_c,pic,cat,vc,lc;
String tid,ttitle,tconent,tcomment,tpic,tcat,tvc,tlc;
private int cpage=1,srch=0;
private int count;
private double apage;
private TextView tpage;
private ImageButton next_btn,rev_btn;
private String res="";
private Bitmap[] img;
private SearchView searchv;

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

tpage=(TextView) findViewById(R.id.magazine_statuts_txt);
next_btn=(ImageButton) findViewById(R.id.mag_next_btn);
rev_btn=(ImageButton) findViewById(R.id.mag_rev_btn);
lv=(ListView) findViewById(R.id.mag_list);
lv.setDivider(null);

lv.setOnItemClickListener(new OnItemClickListener() {

@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long idt) {
Intent i=new Intent(Magazine.this,Mag_post_data.class);
i.putExtra("id",Integer.parseInt(id[position]));
startActivity(i);
}
});

next_btn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
if(cpage==apage){
Toast.makeText(getApplication(),"آخرين صفحه",Toast.LENGTH_LONG).show();
}else{
cpage++;
new getpost().execute();
}
}
});

rev_btn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
if(cpage==1){
Toast.makeText(getApplication(),"اولين صفحه",Toast.LENGTH_LONG).show();
}else{
cpage--;
new getpost().execute();
}
}
});

new getpost().execute();


}

private void makearray(int c){

id=new String[c];
title=new String[c];
content=new String[c];
pic=new String[c];
img=new Bitmap[c];
commect_c=new String[c];
cat=new String[c];
vc=new String[c];
lc=new String[c];

Arrays.fill(title, "");

Bitmap img_temp=BitmapFactory.decodeResource(getResources(), R.drawable.no_img_reco);
Arrays.fill(img, img_temp);

}
//---------------------------in method moshakhasat va joziate posto migire-----------------------------
public class getpost extends AsyncTask{

ProgressDialog pd;

protected void onPreExecute() {
super.onPreExecute();
pd=new ProgressDialog(Magazine.this);
pd.setCancelable(false);
pd.setMessage("درحال بارگذاري");
pd.getWindow().setGravity(Gravity.CENTER);
pd.show();

};

@Override
protected Object doInBackground(Object... arg0) {

try{
String data=URLEncoder.encode("page","utf8")+"="+URLEncoder.encode(cpage+"","utf8");
URL link=new URL("http://192.168.1.2/drjibi_adc/webs/get_list_p.php");
URLConnection connect=link.openConnection();

//send data
connect.setDoOutput(true);
OutputStreamWriter wr=new OutputStreamWriter(connect.getOutputStream());
wr.write(data);
wr.flush();

BufferedReader reader=new BufferedReader(new InputStreamReader(connect.getInputStream()));

StringBuilder sb=new StringBuilder();

String line=null;

while((line=reader.readLine()) != null){
sb.append(line);
}

res=sb.toString();

for(int y=0;y<4;y++){
if(res.charAt(y)=='☻'){
count=Integer.parseInt(res.substring(1, y));
res=res.substring(y+1);
break;
}
}

for(int y=0;y<4;y++){
if(res.charAt(y)=='☻'){
apage=Integer.parseInt(res.substring(0, y));
res=res.substring(y+1);
break;
}
}


makearray(count);

int f=0,c=0;
for(int i=0;i<res.length();i++){
if(res.charAt(i)=='☻'){
String temp=res.substring(f,i);

if(c==0){
tid=temp;
}
if(c==1){
ttitle=temp;
}
if(c==2){
tconent=temp;
}
if(c==3){
tpic=temp;
}
if(c==4){
tcomment=temp;
}
if(c==5){
tvc=temp;
}
if(c==6){
tlc=temp;
}
if(c==7){
tcat=temp;

for(int t=0;t<count;t++){
if(title[t].equals("")){
id[t]=tid;
title[t]=ttitle;
content[t]=tconent;
commect_c[t]=tcomment;
vc[t]=tvc;
lc[t]=tlc;
cat[t]=tcat;
new getimage(tpic, t).execute();
break;
}
}
c=-1;
}
f=i+1; c+=1;

}
}
Log.i("error","error nadarim");

}catch(Exception e){res=e.toString();
Log.i("error",e.toString());}


return "";
}

@Override
protected void onPostExecute(Object result) {
super.onPostExecute(result);
pd.dismiss();

apage=Math.ceil(apage/10);
tpage.setText("صفحه "+cpage+" از "+(int)apage);

lv.setAdapter(new AA());


}




}
//---------------------------------in method ax ro migire mirize tu arrayeha va mid ebe mthode get poste balai ------------
public class getimage extends AsyncTask<String, Void, Bitmap>{
private String url;
private int P;
public getimage(String u,int p){
url=u;
P=p;
}

@Override
protected Bitmap doInBackground(String... arg0) {

Bitmap temp=null;
try{
url=url.replace("uploads", "http://192.168.1.2/drjibi_adc/uploads"); //just for local host
InputStream in=new java.net.URL(url).openStream();
temp=BitmapFactory.decodeStream(in);
}catch(Exception e){

}
return temp;
}

@Override
protected void onPostExecute(Bitmap result) {
super.onPostExecute(result);

img[P]=result;
lv.setAdapter(new AA());
}
}

//classe adaptore listview
class AA extends ArrayAdapter<String>{


public AA(){
super(Magazine.this, R.layout.row_magazine, title);
}

@Override
public void notifyDataSetChanged() {
super.notifyDataSetChanged();

}

@Override
public View getView(int position,View convertView, ViewGroup parent) {
LayoutInflater Inf= (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View row=Inf.inflate(R.layout.row_magazine, parent, false);

TextView p_cat = (TextView) row.findViewById(R.id.post_l_cat_txt);
TextView p_title = (TextView) row.findViewById(R.id.post_l_title_txt);
TextView p_cont = (TextView) row.findViewById(R.id.post_l_cont_txt);
TextView p_comment = (TextView) row.findViewById(R.id.mag_c_c);
TextView p_view = (TextView) row.findViewById(R.id.mag_v_c);
TextView p_like = (TextView) row.findViewById(R.id.mag_l_c);
ImageView p_img = (ImageView) row.findViewById(R.id.post_img);


String con=Html.fromHtml(content[position]).toString().replace("\n", " ");
if(con.length()>60){con=con.substring(0, 60);}

p_title.setText(title[position]);
p_cat.setText(cat[position]);
p_cont.setText(con+"...");
p_cont.setMaxLines(1);
p_comment.setText(commect_c[position]);
p_view.setText(vc[position]);
p_like.setText(lc[position]);
p_img.setImageBitmap(img[position]);




return (row);
}


}
}

الان روي اين بخوام اوني كه ميگيد رو، چجوري بايد اعمال كنم؟

نظرات

Mr7 11 سال پیش
در همون oncreat بنویسش ممکنه بخاطر پرایوت کردن لیست ویو باشه اگه ارورات compiletime نیستن
sadra 11 سال پیش
شما كدي كه من نوشتم رو ديديد؟ واسه اون چه راه حلي هست؟
amirhossein1376 10 سال پیش

ببخشید من اینجا جواب رو میذارم هر چند سوال قدیمیه ولی احتمالا به درد بعضی ها بخوره

فقط کدها رو کامل میذارم که مشخص تر باشه.شاید اصلا نیاز نبود ولی خوب بهتره(دقیقا همون کدهای پروژه استاد رو باهاش کار میکنیم)

کلاس StructNote:


public class StructNote {
public String title;
public String description;
public boolean done;

}

کلاس AdapterNote:


import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;

import java.util.ArrayList;

public class AdapterNote extends ArrayAdapter<StructNote> {
public AdapterNote(ArrayList<StructNote> array) {
super(G.context,R.layout.adapter_note , array);
}


private static class ViewHolder{
public ViewHolder(View view){

}

public void fill(ArrayAdapter<StructNote> adapter , StructNote item , int position){

}
}


@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder;
StructNote item = getItem(position);
if(convertView == null){
convertView = G.inflater.inflate(R.layout.adapter_note , parent , false);
holder = new ViewHolder(convertView);
convertView.setTag(holder);
}else{
holder = (ViewHolder) convertView.getTag();
}

holder.fill(this , item , position);
return convertView;
}
}

کلاس G:


import android.app.Application;
import android.content.Context;
import android.view.LayoutInflater;
import android.widget.ArrayAdapter;

public class G extends Application {

public static Context context;
public static LayoutInflater inflater;
public static ArrayAdapter<StructNote> adapter;

@Override
public void onCreate() {
super.onCreate();
context = getApplicationContext();
inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
}

کلاس MainActivity:

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.widget.ListView;

import java.util.ArrayList;

public class MainActivity extends AppCompatActivity {

public ArrayList<StructNote> notes = new ArrayList<>();

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);


G.adapter = new AdapterNote(notes);
ListView lstContent = (ListView) findViewById(R.id.lstContent);
lstContent.setDivider(null);
lstContent.setAdapter(G.adapter);

for (int i = 1; i < 20; i++) {
StructNote note = new StructNote();
note.title = "title#" + i;
note.description = "desc#" + i;
note.done = true;
notes.add(note);
}

G.adapter.notifyDataSetChanged();


Thread thread = new Thread(new Runnable() {
@Override
public void run() {
try {
Thread.sleep(10000);
G.adapter.getItem(15) // خروجی از جنس StructNote دارد
.description = "t";

G.adapter.notifyDataSetChanged();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
});

thread.start();

}

}

 

با این کار بعد 10 ثانیه دسکریپشن آیتم 15 تغییر میکنه

نظرات


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