Reputation: 413
Why do I say mis here this array list Code I tried a lot I did not find the solution Please Help
*public class* MainActivity extends AppCompatActivity {
**@Override**
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ArrayList<Listitem> Items = new ArrayList<Listitem>();
Items.add(new Listitem("Noor", "Derna"));
Items.add(new Listitem("MERO", "Derna"));
Items.add(new Listitem("Noor", "Derna"));
Items.add(new Listitem("Noor", "Derna"));
**mycustomadapter myadabter = new mycustomadapter(Items);**
**ListView Ls = (ListView) findViewById(R.id.listView);
Ls.setAdapter(myadabter);
Ls.setOnClickListener(new AdapterView.OnItemClickListener() {**
**@Override**
*public void onItemClick (AdapterView<?> parent, View view, int position, long id) {*
TextView txtname = (TextView) view.findViewById(R.id.txt_name);
TextView txtdisc = (TextView) view.findViewById(R.id.txt_disc);
Toast.makeText(getApplicationContext(), txtname.getText(), Toast.LENGTH_LONG).show();
}
});
}
class mycustomadapter extends BaseAdapter
{
ArrayList<Listitem> Items=new ArrayList<Listitem>(); array list
mycustomadapter(ArrayList<Listitem> Items){
this.Items=Items;
}
@Override
public int getCount() {
return Items.size();
}
@Override
public Object getItem(int position) {
return Items.get(position).Name;
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int i, View View, ViewGroup viewGroup) {
LayoutInflater Linflater=getLayoutInflater();
View view1 = Linflater.inflate(R.layout.raw_view,null); الview1يمثل الraw_item
TextView txtname=(TextView)view1.findViewById(R.id.txt_name);
TextView txtdisc=(TextView)view1.findViewById(R.id.txt_disc);
txtname.setText(Items.get(i).Name);
txtdisc.setText(Items.get(i).Desc);
array list
return view1;
}
}
}` ListView Ls = (ListView) findViewById(R.id.listView); //اتصال بالليست فيو Ls.setAdapter(myadabter); Ls.setOnClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick (AdapterView<?> parent, View view, int position, long id) {
TextView txtname = (TextView) view.findViewById(R.id.txt_name);
TextView txtdisc = (TextView) view.findViewById(R.id.txt_disc);
Toast.makeText(getApplicationContext(), txtname.getText(), Toast.LENGTH_LONG).show();
}
});
}`
Upvotes: 1
Views: 1895
Reputation: 667
For making array-list final, because you have declared it inside onCreate(), and while using it inside onItemClick listener you have to make it final.
If you don't want to make it final, you can declare array-list as a global , and you initialize it inside onCreate(), then you do not need to make it final.
And yes, you can remove final from adapter initialization.It will not affect to code.
Upvotes: 0
Reputation: 667
Why are you taking On-clickListner in Listview??..whatever you are doing is this...
Ls.setOnClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick (AdapterView<?> parent, View view, int position, long id) {
TextView txtname = (TextView) view.findViewById(R.id.txt_name);
TextView txtdisc = (TextView) view.findViewById(R.id.txt_disc);
Toast.makeText(getApplicationContext(), txtname.getText(), Toast.LENGTH_LONG).show();
}
});
}`
This is completely wrong..if you want to make click of listview item and get text from item on which you have clicked then do like this,
Ls.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int position, long l) {
Toast.makeText(MainActivity.this, Items.get(position).getName() + " " + Items.get(position).getDesc(), Toast.LENGTH_SHORT).show();
}
});
To clear your confusion here is complete code,
public class MainActivity extends AppCompatActivity {
ListView Ls;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Ls = (ListView) findViewById(R.id.listView);
final ArrayList<Listitem> Items = new ArrayList<Listitem>();
Items.add(new Listitem("Noor", "Derna"));
Items.add(new Listitem("MERO", "Derna"));
Items.add(new Listitem("Noor", "Derna"));
Items.add(new Listitem("Noor", "Derna"));
final mycustomadapter myadabter = new mycustomadapter(Items);
Ls.setAdapter(myadabter);
Ls.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int position, long l) {
Toast.makeText(MainActivity.this, Items.get(position).getName() + " " + Items.get(position).getDesc(), Toast.LENGTH_SHORT).show();
}
});
}
class mycustomadapter extends BaseAdapter {
ArrayList<Listitem> Items = new ArrayList<Listitem>();
public TextView txtname, txtdisc;
LayoutInflater Linflater;
mycustomadapter(ArrayList<Listitem> Items) {
this.Items = Items;
}
@Override
public int getCount() {
return Items.size();
}
@Override
public Object getItem(int position) {
return Items.get(position).name;
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int i, View View, ViewGroup viewGroup) {
Linflater = getLayoutInflater();
View view1 = Linflater.inflate(R.layout.raw_view, null);
txtname = (TextView) view1.findViewById(R.id.txt_name);
txtdisc = (TextView) view1.findViewById(R.id.txt_disc);
txtname.setText(Items.get(i).name);
txtdisc.setText(Items.get(i).desc);
return view1;
}
}
}
Upvotes: 1