آموزش های این وب سایت به صورت رایگان در دسترس است. اطلاعات بیشتر
بروز خطا
   [message]
اشتراک در سوال
رای ها
[dataList]

پروژه لیست ویو بدون کلاس G (حل شد)

حامد  12 سال پیش  12 سال پیش
+1 0

سلام بچه ها کسی میدونه اگه بخواهیم محتویات کلاس G را در کلاس AdapterNote قرار بدیم چیکار باید بکنیم؟

کلاس G :

public class G extends Application{
   
    public static Context context;
    public static LayoutInflater inflater;
   
    @Override
    public void onCreate() {
        // TODO Auto-generated method stub
        super.onCreate();
        context = getApplicationContext();
        inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    }
}

کلاس AdapterNote :

public class AdapterNote extends ArrayAdapter{
   
    public AdapterNote(ArrayList array) {
        super(G.context, R.layout.adapter_notes, array);
    }
   
    private static class ViewHolder {
        public TextView txttitle;
        public CheckBox chkDone;
       
        public ViewHolder(View view){
            txttitle = (TextView) view.findViewById(R.id.txttitle);
            chkDone = (CheckBox) view.findViewById(R.id.chkDone);
        }
       
        public void fill(ArrayAdapter adapter, final StructNote item, int position) {
            txttitle.setText(item.title);
            chkDone.setChecked(item.done);
           
            chkDone.setOnClickListener(new OnClickListener() {
               
                @Override
                public void onClick(View view) {
                    CheckBox checkbox = (CheckBox) view;
                    item.done = checkbox.isChecked();
                   
                    if (item.done) {
                            txttitle.setTextColor(Color.RED);
                    } else {
                            txttitle.setTextColor(Color.WHITE);
                    }
                }
            });
           
            if (item.done) {
                txttitle.setTextColor(Color.RED);
            } else {
                txttitle.setTextColor(Color.WHITE);
            }
        }
    }
   
    @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_notes, parent, false);
            holder = new ViewHolder(convertView);
            convertView.setTag(holder);
        }else {
            holder = (ViewHolder) convertView.getTag();
        }       
        holder.fill(this, item, position);
        return convertView;
    }   
}

کلاس mainActivity :

public class MainActivity extends Activity {

    public ArrayList notes = new ArrayList();
    public ArrayAdapter adapter;
   
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
       
        ListView lstContent = (ListView) findViewById(R.id.lstContent);
        adapter = new AdapterNote(notes);
        lstContent.setAdapter(adapter);
       
        for (int i = 0; i < 40; i++) {
            StructNote note = new StructNote();
            note.title = "title" + i;
            note.done = false;
           
            notes.add(note);
        }
        adapter.notifyDataSetChanged();
    }

}
0 0
ArrayAdapter از BaseAdapter و نهایتا از Object ارث بری داره و رفتارش ارتباطی به Application نداره. مثلا getApplicationContext() براش مفهومی نداره. هدف از انجامش چیه؟ (12 سال پیش)
0 0
برای سرگرمی .. دیدم به جز این سایت بقیه پروژه های تو اینترنت از کلاس G استفاده نمیکنند ، گفتم آمارشو دربیارم اطلاعات بالا بره (12 سال پیش)
0 0
همیشه داشتن یه Library اختصاصی برای برنامه نویسی عالیه. اینکه بتونی با کمترین کد نویسی پروژه رو پیش ببری بهتر از اینه که همیشه مثلا ArrayAdapter رو از اول بنویسی. وقت رو این جور چیزا بذاری بیشتر اطلاعات میره بالا! به قول یه بنده خدایی با موشک! (12 سال پیش)
0 0
آره همون بنده خدای سودجو :)) (12 سال پیش)
 برای این سوال 5 پاسخ وجود دارد.
پاسخ به سوال 
Spirit  12 سال پیش
+3 0

Adapter class

 public class AdapterNote extends ArrayAdapter{

public static Context context;
public static LayoutInflater inflater;

public AdapterNote( Context context, ArrayList array) {
super(context, R.layout.adapter_notes, array);
this.context = context;
inflater = LayoutInflater.from(context);
}

private static class ViewHolder {
public TextView txttitle;
public CheckBox chkDone;

public ViewHolder(View view){
txttitle = (TextView) view.findViewById(R.id.txttitle);
chkDone = (CheckBox) view.findViewById(R.id.chkDone);
}

public void fill(ArrayAdapter adapter, final StructNote item, int position) {
txttitle.setText(item.title);
chkDone.setChecked(item.done);

chkDone.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View view) {
CheckBox checkbox = (CheckBox) view;
item.done = checkbox.isChecked();

if (item.done) {
txttitle.setTextColor(Color.RED);
} else {
txttitle.setTextColor(Color.WHITE);
}
}
});

if (item.done) {
txttitle.setTextColor(Color.RED);
} else {
txttitle.setTextColor(Color.WHITE);
}
}
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder;
StructNote item = getItem(position);

if (convertView == null) {
convertView = inflater.inflate(R.layout.adapter_notes, parent, false);
holder = new ViewHolder(convertView);
convertView.setTag(holder);
}else {
holder = (ViewHolder) convertView.getTag();
}
holder.fill(this, item, position);
return convertView;
}
}

Activity class

 public class MainActivity extends Activity {

public ArrayList notes = new ArrayList();
public ArrayAdapter adapter;

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

ListView lstContent = (ListView) findViewById(R.id.lstContent);
adapter = new AdapterNote(MainActivity.this, notes);
lstContent.setAdapter(adapter);

for (int i = 0; i < 40; i++) {
StructNote note = new StructNote();
note.title = "title" + i;
note.done = false;

notes.add(note);
}
adapter.notifyDataSetChanged();
}

}
0 0
دمت گرم ... همیشه فاز میدی (12 سال پیش)
0 0
دقیقا، اما استفاده از کلاس جی بهتره هان! بی دردسره (12 سال پیش)
0 0
حامد کلا میخواد یه حرکتی بزنه که خاص بشه D: ، وگرنه معلومه که اگه پروژه بدرد بخور باشه به یه کلاس در سطح Application نیاز داره :| (12 سال پیش)
0 0
مجتبی هم که همیشه باید تیکه رو بندازه ... خخخخ (12 سال پیش)
0 0
آفرین آلو بازم از این تیکه ها بنداز جیگرمون حال بیاد ... فدایی داری (12 سال پیش)
0 0
من متعلق به همه تونم D: ، دارم میرم امتحان بدم ، برگشتم اگه هنوز حامد اینجا بود یعنی تیکه جواب نمیده ، درسته میندازم :)) (12 سال پیش)
پاسخ به سوال 
حامد  12 سال پیش
0 0

فقط کرش میده در حد لالیگا:

در این خط mainActivity.this را قبول نمیکنه باید پاکش کنی تا ارور از بین بره:

adapter =newAdapterNote(MainActivity.this, notes);

برنامه هم اجرا میکنی که کرش میشه و logcat هم در زیر برات میزارم :

FATAL EXCEPTION: main
java.lang.RuntimeException:
Unable to start activity ComponentInfo{com.hamedjj.listviewfinal
/com.hamedjj.listviewfinal.MainActivity}:
java.lang.NullPointerException
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2180)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230)
at android.app.ActivityThread.access$600(ActivityThread.java:141)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:5041)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.NullPointerException
at android.widget.ArrayAdapter.init(ArrayAdapter.java:310)
at android.widget.ArrayAdapter.<init>(ArrayAdapter.java:153)
at com.hamedjj.listviewfinal.AdapterNote.<init>(AdapterNote.java:21)
at com.hamedjj.listviewfinal.MainActivity.onCreate(MainActivity.java:21)
at android.app.Activity.performCreate(Activity.java:5104)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2144)
... 11 more

من اینو دیشب تست کردم نشد به همین خاطر سوال مطرح کردم
تو بقیه پروژه ها به غیر از این LayoutInflater را به این شکل در getview معرفی میکنند که باز هم امتحان کردم کرش شد

 LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);		

پروژه را آپلود کردم که اگر خواستی  ببینی : لینک

0 0
حامد کدهای اینجا رو با کدهای پروژه خودت و من مقایسه کن لینک (12 سال پیش)
+1 0
ای دمت گرم حل شد ... مثل همیشه چی ... فدایی داری (12 سال پیش)
پاسخ به سوال 
sadeghbarout  12 سال پیش
+2 0

من که اینجوری نوشتم کرشی نکرد

کلاس adapter:

 public class AdapterNote extends ArrayAdapter<StructNote> {

public static LayoutInflater inflater;


public AdapterNote(ArrayList<StructNote> array, Context context) {
super(context, R.layout.adapter_notes, array);
inflater = LayoutInflater.from(context);
}
...

کلاس main:

... 

ListView lstContent = (ListView) findViewById(R.id.lstContent);
adapter = new AdapterNote(notes, this);
lstContent.setAdapter(adapter);

...
0 0
spirit هم مثل شما نوشت .. باز هم دمت گرم ... صادقی (12 سال پیش)
0 0
حامد تو هم مارو گیج کردی ها!! آخرش کد spirit کرش کرد یا نه؟ چون گفتی کرش اینو نوشتم ! اینم کرش داره؟ الان وضعیت چیه؟!! (12 سال پیش)
0 0
نه دیگه بعدش پروژه منو گرفت کدش را تغییر داد آپلود کرد دیگه ... تو کامنت هم لینکشو قرار داد ... منم در جواب نوشتم دمت گرم ... خدایی شرمندتم اگه وقتت گرفته شد باید مینوشتم (حل شد دمت گرم) (12 سال پیش)
0 0
اونو دیدم ولی دانالود نکردم. آخه رو جواب قبلی هم گفته بودی دمت گرم ولی بعدش دوباره نوشتی کرش کرده. گفتم لابد اینم مثل همون دمت گرمه;) . درضمن نه بابا شرمنده چیه؟ دیگه از این حرفا نزنی ها ;) (12 سال پیش)
0 0
حالا آمار پایینی را ببین داری؟ نیاز هست بزارم .. نیاز نیست؟ (12 سال پیش)
پاسخ به سوال 
حامد  12 سال پیش
0 0

وقتی میخواهیم آرایه ها را از دیتابیس تو لیست بریزیم adapter.notifyDataSetChanged(); نیاز هست یا نه؟

چون بود و نبودش فرقی نداره برنامه عمل میکنه

 		if (c.moveToFirst()) {
do {
try {
StructNote note = new StructNote();
note.title = c.getString(c.getColumnIndex("id"));
note.description = c.getString(c.getColumnIndex("name"));
note.done = false;

notes.add(note);
} catch (Exception e) {
e.printStackTrace();
}
} while (c.moveToNext());
}

adapter.notifyDataSetChanged();
0 0
فکر کنم استاد گفته بودند برای اینکه مقادیری که در دستور if (برنامه خودشون) هست در adapter ریخته بشه این دستور باید گذاشته بشه . اما شرط دیتابیس (c.movetofirst) این کار را مستقیم انجام میده .. حالا نمیدونم باید در آخر بلاک while باشه یا نه؟ (12 سال پیش)
0 0
جالبه! بدون اون هم کار میکنه!! ظاهرا که نیازی نیست ولی اگه داده ها رو تغییر دادیم فکر کنم نیاز باشه (12 سال پیش)
0 0
آخه من تو بقیه پروژه های لیست ویو و دیتابیس این دستور را تا حالا ندیده بودم .... اولین بار تو آموزش استاد دیدم ... برمیدارم اگر مشکلی پیش اومد حتما آمارشو بهتون میدم مطلع بشین ... فدا (12 سال پیش)
0 0
منم یکم باهاش ور میرم اگه مشکلی ایجاد شد خبر میدم. دمت گرم (12 سال پیش)
0 0
یه دکمه گذاشتم و دستور پر شدن آرایه رو به عهده دکمه گذاشتم . بدون notify، لیست ویو پر نشد ولی با notify لیست ویو پر شد. در نتیجه اگه موقع تعریف آداپتر، پشت سرش آرایه رو پر کردی که هیچ وگرنه اگه بعدا قراره این کارو بکنی باید از notify استفاده کنی. حالا میخواد از دیتابیس باشه یا حلقه for (12 سال پیش)
0 0
عالی ... (12 سال پیش)
پاسخ به سوال 
حامد  12 سال پیش
0 0

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

تو کلاس های structNote , arrayAdapter ,mainactivity چطور باید تعریف بشه؟

اگر همین جوری تو arrayadapter کد listener بهش بدی که همون قضیه الوارها میشه که تو عکس مشخصه:

0 0
فکر کنم با یه boolean و یه if و if else حل بشه ... (12 سال پیش)
0 0
حامد خیلی سخت گرفتیا ! ، خوب هر بار که آیتم رو میخوای fill کنی ، وضعیت اون پروگرس بار هم بخون و دوباره ست کن ، مشکل حل میشه دیگه ! (12 سال پیش)
0 0
خخخخخخخخخخخ ، مردم از خنده - خوب بود - من برم امتحان بدم بیام D: (12 سال پیش)

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