مرشس ولي اينو كجا بايد بگذارم؟ توي خود GetView ؟
بروز خطا
[message]
اشتراک در سوال
رای ها
[dataList]
پرسش و پاسخ
آپديت كردن يك آيتم در ليست ويوو
مدیریت گفتگو
آخرین تغییر: 10 سال پیش
به يه مشكل برخوردم، ميخوام وقتي مقدار يكي از آيتم ها در ليست ويوو تغيير كرد، اون مقدار در ليست ويوو آپديت بشه، بدون اينكه ليست وئوو بخواد دوباره بارگذاري بشه يا اسكرول بشه، كسي راحي بلده؟
پاسخها 3
وقتی آرایه تغییر بکنه لیست ویو تغییر میکنه بعد از 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();
نظرات
ببينيد اين كد منه:
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);
}
}
}
الان روي اين بخوام اوني كه ميگيد رو، چجوري بايد اعمال كنم؟
نظرات
ببخشید من اینجا جواب رو میذارم هر چند سوال قدیمیه ولی احتمالا به درد بعضی ها بخوره
فقط کدها رو کامل میذارم که مشخص تر باشه.شاید اصلا نیاز نبود ولی خوب بهتره(دقیقا همون کدهای پروژه استاد رو باهاش کار میکنیم)
کلاس 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 تغییر میکنه
نظرات
پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .
ویرایش
پیام
نظرات