دلیل اجرا نشدن listViewساده کاستوم
با سلام دوستان یه لیست ویویی با توجه به اموزشی پیش رفتم وقتی اجراش میکنم تو امیلاتور بالا نمیاد ممنون میشم کمکم کنین
package com.example.newayhan2;
import java.util.List;
import android.support.v7.app.ActionBarActivity;
import android.app.ListActivity;
import android.content.Context;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ImageView;
import android.widget.TextView;
public class MainActivity extends ListActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
setListAdapter(new MyAdapter(this,android.R.layout.simple_list_item_1,
R.id.textView1,
getResources().getStringArray(R.array.itemName)));
}
private class MyAdapter extends ArrayAdapter<String>{
public MyAdapter(Context context, int resource, int textViewResourceId,
String[] strings) {
super(context, resource, textViewResourceId,strings);
// TODO Auto-generated constructor stub
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
LayoutInflater inflater=(LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View row=inflater.inflate(R.layout.list_item,parent,false);
String[] items=getResources().getStringArray(R.array.itemName);
ImageView iv =(ImageView)findViewById(R.id.imageView1);
TextView tv=(TextView)findViewById(R.id.textView1);
tv.setText(items[position]);
if(items[position].equals("united state")){
iv.setImageResource(R.drawable.ic_launcher);
}else if (items[position].equals("Brezil")) {
iv.setImageResource(R.drawable.ic_launcher);
}
return row;
}
}}
یعنی اینجوری :
public MyAdapter(Context context, int resource, int textViewResourceId,
String[] strings) {
super(context, resource, textViewResourceId, strings);
context = this.context;
strings = this.strings;
}
07-04 10:51:22.329: E/AndroidRuntime(5294): at com.example.newayhan2.MainActivity$MyAdapter.getView(MainActivity.java:44)
دوست عزیز مگه شما در این عبارت مقدار کانستراکتور یا سازندت رو ست نکردی؟
etListAdapter(new MyAdapter(this,android.R.layout.simple_list_item_1, R.id.textView1, getResources().getStringArray(R.array.itemName)));
خب اینجا 4 تا پارامتر داری:
context
inr res
int text id
string[]
حالا کلاس باباش باید مقادیرش رو ست کنه یا نه؟
به این خط نگاه کن:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
این دقیقا منظوره منه:
public MyAdapter(Context context, int resource, int textViewResourceId,
String[] strings) {
super(context, resource, textViewResourceId, strings);
context = this.context;
strings = this.strings;
}
اینم ازxml:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string-array name="itemName">
<item name="usa">united state</item>
<item name="brazil">Brezil</item>
</string-array>
</resources>
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content" >
<ImageView
android:id="@+id/imageView1"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_weight="0.5"
android:src="@drawable/ic_launcher" />
<TextView
android:id="@+id/textView1"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_weight="0.5"
android:text="TextView" />
</LinearLayout>
</LinearLayout>
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<ListView
android:id="@android:id/list"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
tools:listitem="@layout/list_item" >
</ListView>
</LinearLayout>
ببین دوست عزیز من این کد هارو زدم دقیقا برنامه خوب کار میکنه بدون هیچ ایرادی
سورس MainActivity:
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.widget.ListView;
public class MainActivity extends AppCompatActivity {
private ListView lst_main;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
lst_main = (ListView) findViewById(R.id.lst_main);
MyListViewAdabter adapter = new MyListViewAdabter(MainActivity.this , R.layout.lst_row_view , R.id.txt_lst_row , getResources().getStringArray(R.array.array));
lst_main.setAdapter(adapter);
}
}
اینم سورس کد MyListViewAdapter:
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.TextView;
public class MyListViewAdabter extends ArrayAdapter<String>{
private final Context context;
private final String[] array;
LayoutInflater inflater;
public MyListViewAdabter(Context context , int layoutRes , int textId , String[] array){
super(context, R.layout.lst_row_view, R.id.txt_lst_row, array);
this.context = context;
this.array = array;
}
private static class ViewHolder{
TextView textView;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder viewHolder;
if(convertView == null){
inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = inflater.inflate(R.layout.lst_row_view, parent , false);
viewHolder = new ViewHolder();
viewHolder.textView = (TextView) convertView.findViewById(R.id.txt_lst_row);
convertView.setTag(viewHolder);
}
else {
viewHolder = (ViewHolder) convertView.getTag();
}
viewHolder.textView.setText(array[position]);
return convertView;
}
}
دقت کنید :
TextView tv=(TextView) row.findViewById(R.id.textView1);
به نظر من اصلا سورسی که میخواد عناصرش در لیست ویو قرار بگیره ارتباطش با ArrayAdapter برقرار نشده ، یعنی چیزی تو لیست ویو ریخته نمیشه که بخواد نشون بده مقادیری که میخوای نشون بدی ، وقتی از json تحویل میگیری تو آرایه که در کلاس G تعریف شده ریخته میشن ؟ اگر ریخته میشن ، مشکل از Adapternote
import java.util.ArrayList;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.CheckBox;
import android.widget.ImageView;
import android.widget.TextView;
public class AdapterNote extends ArrayAdapter {
@SuppressWarnings("unchecked")
public AdapterNote(ArrayList<StructItem> array) {
super(G.context, R.layout.adapter_items, array);
}
private static class ViewHolder
{
final public ViewGroup layoutRoot;
final public TextView txtID;
final public TextView txtName;
final public CheckBox chkSel;
final public ImageView imgDelete;
public ViewHolder(View view)
{
txtID = (TextView) view.findViewById(R.id.txtID);
txtName = (TextView) view.findViewById(R.id.txtName);
chkSel = (CheckBox) view.findViewById(R.id.chkSel);
imgDelete = (ImageView) view.findViewById(R.id.imgDelete);
layoutRoot = (ViewGroup) view.findViewById(R.id.layoutRoot);
}
public void fill(final ArrayAdapter<StructItem> adapter,
final StructItem item, final int position)
{
txtID.setText(item.did + "");
txtName.setText(item.dname);
}
}
@SuppressWarnings("unchecked")
@Override
public View getView(int position, View convertView, ViewGroup parent)
{
ViewHolder holder;
StructItem item = (StructItem) getItem(position);
if (convertView == null)
{
convertView = G.inflater.inflate(R.layout.adapter_items,
parent, false);
holder = new ViewHolder(convertView);
convertView.setTag(holder);
}
else
{
holder = (ViewHolder) convertView.getTag();
}
holder.fill(this, item, position);
return convertView;
}
}
با سلام ممنون از تمام دوستان و اساتید بخصوص اقای spirit دوستان تو این حالت من میخوام هر ایتم رو فراخوانی ببینین این کد چگونه تغییر بدم جواب بدم کدها انگار ایراد داره بر روی ایتمها اثری ندار بازم ممنون
@Override
protected void onListItemClick(ListView l, View v, int position, long id) {
// TODO Auto-generated method stub
super.onListItemClick(l, v, position, id);
String[] items=getResources().getStringArray(R.array.itemName);
String chess=items[position];
try {
Class ourClass = Class.forName("com.example.newayhan2."+chess);
Intent ourIntent=new Intent(MainActivity.this,ourClass);
startActivity(ourIntent);
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .