我有一个复杂的列表视图,我在listview项目上设置了onclick但是我想对listview的每一行都这样做,它应该在那里打开相应的活动(不同的活动)。我该怎么办?我的代码在这里..
public class Content extends Activity {
String [] content = {"Linked List", "Write your own function", "programs", "Trees", "Sorting Techniques", "C Pointer",
"C Functions", "C Statements", "C Arrays", "C Variables", "C Structures", "C Macros", "C Headers", "C File Operations",
"C Declarations and Definitions", "C Functions-built-in", "C Functions-The Main Function", "OS Concepts",
"General Concepts", "Compiling and Linking"};
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.content);
ListView list = (ListView)findViewById(R.id.content_listView);
ContentAdapter ca = new ContentAdapter();
list.setAdapter(ca);
list.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
long arg3) {
// TODO Auto-generated method stub
/*Here I want to do something that after
clicking on any listview row it should open there respective page
*/
}
});
}
class ContentAdapter extends BaseAdapter {
@Override
public int getCount() {
// TODO Auto-generated method stub
return content.length;
}
@Override
public Object getItem(int arg0) {
// TODO Auto-generated method stub
return null;
}
@Override
public long getItemId(int arg0) {
// TODO Auto-generated method stub
return 0;
}
@Override
public View getView(int index, View v, ViewGroup vg) {
// TODO Auto-generated method stub
v = getLayoutInflater().inflate(R.layout.custom_content, null);
TextView content_txt = (TextView)v.findViewById(R.id.custom_content_textView);
content_txt.setText(content[index]);
return v;
}
}
}
答案 0 :(得分:1)
list.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
long arg3) {
switch (arg2){
case 0:
startActivity(new Intent(this,Activity2.class));
break;
case 1:
// do something else
break;
}
});
答案 1 :(得分:0)
lv.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
// When clicked, show a toast with the TextView text
if(position == 1) {
//code specific to first list item
Intent myIntent = new Intent(view.getContext(), Html_file1.class);
startActivityForResult(myIntent, 0);
}
if(position == 2) {
//code specific to 2nd list item
Intent myIntent = new Intent(view.getContext(), Html_file2.class);
startActivityForResult(myIntent, 0);
}
}
});
答案 2 :(得分:0)
有两种选择。
根据其他人的建议,您可以使用。(推荐一个)
lv.setOnItemClickListener( Your OnItemClickListener );
由于每一行都是R.layout.custom_content
的一部分,因此您可以在xml文件的最顶层布局上设置onclick侦听器。最顶层的布局将覆盖行中的所有视图。 (不建议这样做,但可能的解决方案)。
v = getLayoutInflater().inflate(R.layout.custom_content, null);
TopMostLayoutType topmostlayout = (TopMostLayoutType)v.finViewById(R.id.topmostLayoutId);
topmostlayout.setOnClickListener(yourOnClickListener);
答案 3 :(得分:0)
使用Enum而不是String,使用片段也很有帮助。
public enum Content implements Activity {
LINKED("Linked List"),WRITE ("Write your own function"),
PROGRAM("programs"),TREE ("Trees"),SORT( "Sorting Techniques")};
private String name;
Content(String name) {
this.name = name;
}
@Override
public String toString() {
return name;
}
@Override
public Activity getActivity()
{
switch (this)
{
case LINKED:
return (new Intent(this,Activity1.class));
case WRITE:
return (new Intent(this,Activity2.class));
default:
return null;
}
}