Reputation: 21
I have two activities MainActivity.java and Second.java. I want that when the user clicks on image view its background image will change and when user clicks on any item in list, Second Activity
will open.
Here is My code, it's not working.....
rowlaout.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/LinearLayout1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="6dip" >
<ImageView
android:id="@+id/button"
android:layout_width="22dp"
android:layout_height="22dp"
android:layout_marginLeft="4dp"
android:layout_marginRight="10dp"
android:layout_marginTop="4dp"
android:src="@drawable/ok" >
</ImageView>
<TextView
android:id="@+id/label"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="#fff"
android:textSize="30sp" >
</TextView>
</LinearLayout>
dataListAdapter.java
class dataListAdapter extends BaseAdapter {
String[] Title;
Context context;
ImageView i1;
TextView t1;
public dataListAdapter(Context cont,String[] text) {
Title = text;
context=cont;
}
public int getCount() {
// TODO Auto-generated method stub
return Title.length;
}
public Object getItem(int arg0) {
// TODO Auto-generated method stub
return null;
}
public long getItemId(int position) {
// TODO Auto-generated method stub
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);;
View row;
row = inflater.inflate(R.layout.rowlayout, parent, false);
i1=(ImageView)row.findViewById(R.id.button);
t1=(TextView) row.findViewById(R.id.label);
t1.setText(Title[position]);
i1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
i1.setImageResource(R.drawable.no);
}
});
return (row);
}
}
MainActivity.java
public class MainActivity extends Activity {
Intent intent;
ListView list;
int [] state;
int po;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
list=(ListView)findViewById(R.id.list);
String[] values = new String[] { "Android", "iPhone", "WindowsMobile",
"Blackberry", "WebOS", "Ubuntu", "Windows7", "Max OS X",
"Linux", "OS/2" };
dataListAdapter adapter = new dataListAdapter(this, values);
list.setAdapter(adapter);
list.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, final View view,
int position, long id) {
String itemValue= (String) list.getItemAtPosition(position);
Bundle sendBundle = new Bundle();
sendBundle.putString("value", itemValue);
intent=new Intent(MainActivity.this,Second.class);
intent.putExtras(sendBundle);
startActivity(intent);
po=position;
}
});
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}
Upvotes: 2
Views: 1939
Reputation: 449
First you should change visibility of ImageView i1 i.e. it should not be visible out of getView method.
Context context;
// ImageView i1; // remove this declaration from here
TextView t1;
@Override
public View getView(int position, View convertView, ViewGroup parent) {
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);;
View row;
row = inflater.inflate(R.layout.rowlayout, parent, false);
final ImageView i1=(ImageView)row.findViewById(R.id.button);
t1=(TextView) row.findViewById(R.id.label);
t1.setText(Title[position]);
i1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
i1.setImageResource(R.drawable.no);
// OR
// ((ImageView)view).setImageResource(R.drawable.no);
}
});
return (row);
}
after this try to set imageResource using handler in onClick() method
public void onClick(View v) {
// TODO Auto-generated method stub
new Handler().post(new Runnable() {
@Override
public void run() {
i1.setImageResource(R.drawable.no);
}
});
}
This should resolve your issue.
Upvotes: 3