پروژه لیست ویو بدون کلاس G (حل شد)
سلام بچه ها کسی میدونه اگه بخواهیم محتویات کلاس 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();
}
}
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();
}
}
فقط کرش میده در حد لالیگا:
در این خط 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);
پروژه را آپلود کردم که اگر خواستی ببینی : لینک
من که اینجوری نوشتم کرشی نکرد
کلاس 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);
...
وقتی میخواهیم آرایه ها را از دیتابیس تو لیست بریزیم 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();
یه انیمیشن دانلود میخوام تو لیست بزارم که با کلیک روش استارت بشه
تو کلاس های structNote , arrayAdapter ,mainactivity چطور باید تعریف بشه؟
اگر همین جوری تو arrayadapter کد listener بهش بدی که همون قضیه الوارها میشه که تو عکس مشخصه:

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