Ich habe Anwendung für Android Tablet getan. In diesem muss ich zwei ListViews anzeigen. Eine für einfache Listenansicht und eine für benutzerdefinierte Listenansicht. Sobald ich auf eine einfache Listenansichtszeile klicke, müssen diese Details in einer anderen benutzerdefinierten Listenansicht angezeigt werden. Dafür wurde ich Fragment genommen, um beide Listenansichten auf einem einzigen Bildschirm anzuzeigen. Für Custom ListView wurde ich benutzerdefinierte Adapter genommen, um benutzerdefinierte Daten zu binden. Aber wenn ich auf eine einfache Listenansichtszeile klicke, zeigt die Anwendung keinen Antwortfehler an. Mein Code wäre so. Für mein Fragment enthält den Code wie dieseWie man benutzerdefinierte ListView in android Fragement einstellen?
public class listDetails extends Fragment{
private int nAndroids;
public static ArrayList<HashMap<String, String>> menuItems = new ArrayList<HashMap<String, String>>();
ListDetailsAdapter adapter;
static final String KEY_Title = "title";//"item";
public listDetails() {
}
/**
* Constructor for being created explicitly
*/
public listDetails(int nAndroids) {
this.nAndroids = nAndroids;
}
/**
* If we are being created with saved state, restore our state
*/
@Override
public void onCreate(Bundle saved) {
super.onCreate(saved);
if (null != saved) {
nAndroids = saved.getInt("nAndroids");
}
}
/**
* Save the number of Androids to be displayed
*/
@Override
public void onSaveInstanceState(Bundle toSave) {
toSave.putInt("nAndroids", nAndroids);
}
/**
* Make a grid and fill it with n Androids
*/
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle saved) {
int n;
Context c = getActivity().getApplicationContext();
LinearLayout l = new LinearLayout(c);
String listitems[]=new String[nAndroids];
HashMap<String, String> map = new HashMap<String, String>();
map.put(KEY_Title, "Question1");
map = new HashMap<String, String>();
map.put(KEY_Title, "Question2");
map = new HashMap<String, String>();
map.put(KEY_Title, "Question3");
map = new HashMap<String, String>();
map.put(KEY_Title, "Question4");
menuItems.add(map);
for (n = 0; n < nAndroids; n++)
{
listitems[n] = "one"+n;
ListView list = new ListView(c);
adapter = new ListDetailsAdapter(this, menuItems);
list.setAdapter(adapter);
}
return l;
}
}
Und Code meines benutzerdefinierten Adapter wie diese mich
public class ListDetailsAdapter extends BaseAdapter{
///private listDetails listactivity;
private Activity activity;
private ArrayList<HashMap<String, String>> data;
private static LayoutInflater inflater=null;
public ListDetailsAdapter(Activity a, ArrayList<HashMap<String, String>> d) {
activity = a;
data=d;
inflater = (LayoutInflater)activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
public int getCount() {
// TODO Auto-generated method stub
return data.size();
}
public Object getItem(int position) {
// TODO Auto-generated method stub
return position;
}
public long getItemId(int position) {
// TODO Auto-generated method stub
return position;
}
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
View vi=convertView;
if(convertView==null)
vi = inflater.inflate(R.layout.customlist, null);
TextView title = (TextView)vi.findViewById(R.id.txtTitle);
Button btnone = (Button)vi.findViewById(R.id.btnfirst);
Button btntwo = (Button)vi.findViewById(R.id.btnsecond);
Button btnthree = (Button)vi.findViewById(R.id.btnthird);
Button btnfour = (Button)vi.findViewById(R.id.btnfourth);
Button btnfive = (Button)vi.findViewById(R.id.btnfifth);
btnone.setOnClickListener(oneclick);
btntwo.setOnClickListener(twoclick);
btnthree.setOnClickListener(thrirdclick);
HashMap<String, String> mymap = new HashMap<String, String>();
mymap = data.get(position);
title.setText(mymap.get(listDetails.KEY_Title));
return vi;
}
private View.OnClickListener oneclick = new View.OnClickListener() {
public void onClick(View v) {
// TODO Auto-generated method stub
Log.e("button clicked", "button one clicked");
}
};
}
Bitte führen, was in obigem Code falsch läuft.
Ich kann keine offensichtlichen Fehler in Ihrem Code finden, aber wenn Sie den Debugger in Eclipse und Schritt durch den Code nach dem Setzen eines Haltepunkts auf die Log.e() - Anweisung in der OnClickListener, vielleicht können Sie das Problem lokalisieren? – span
Ich sehe, dass Sie drei verschiedene onClickListers hinzufügen. Wo sind sie, und warum willst du das tun? btnone.setOnClickListener (oneclick); btntwo.setOnClickListener (twoclick); btnthree.setOnClickListener (thrirdclick); – Noloxs
Ja, wir können eine Aktionsmethode für die Verarbeitung mehrerer Schaltflächen verwenden. Aber in Bezug auf mein Problem ist es nicht das Problem. Ich nehme nur so. Aber ich implementiere die Funktionalität dafür nicht. – nari