Button onClick in ListView

  • Antworten:3
Fabian K.
  • Forum-Beiträge: 13

19.12.2015, 13:35:38 via Website

Hey Leute !
Ich habe eine Listview mit einem Edittext Feld und einem Button.
Per klick auf den Button möchte ich, das der Wert aus dem Edittext Feld mit einem Wert aus der Datenbank verglichen wird,
sprich ich benötige die Position der Listview.

Leider bekomme ich das nicht hin :(
Kann mir jemand dabei helfen ?

Liebe Grüße

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

19.12.2015, 13:45:04 via Website

Hallo Fabian,
wie sieht denn dein Code bisher aus?
Hast du denn für die Buttons in der ListView einen OnClickListener gesetzt?

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
Fabian K.
  • Forum-Beiträge: 13

19.12.2015, 13:50:23 via Website

dataAdapter = new SimpleCursorAdapter(
            this, R.layout.country_info,
            cursor,
            columns,
            to,
            0);

    ListView listView = (ListView) findViewById(R.id.listView1);
    // Assign adapter to ListView
    listView.setAdapter(dataAdapter);



    listView.setOnItemClickListener(new OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> listView, View view,
                                int position, long id) {
            // Get the cursor, positioned to the corresponding row in the result set
            final Cursor cursor = (Cursor) listView.getItemAtPosition(position);
            Button myButton = (Button) findViewById(R.id.button1);
            final EditText myInput = (EditText) findViewById(R.id.editText1);
            myButton.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View arg0) {
                    Log.i("Zahl", "OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO");
                    Zahl = Math.abs(Double.parseDouble(String.valueOf(myInput))) - cursor.getDouble(cursor.getColumnIndexOrThrow("antwort"));


                    String countryCode =
                            cursor.getString(cursor.getColumnIndexOrThrow("antwort"));
                    Toast.makeText(getApplicationContext(),
                            countryCode + "Test", Toast.LENGTH_SHORT).show();


                }
            });

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

19.12.2015, 14:13:34 via Website

sp wie ich das stehe stimmt der Code nicht, da du hier:
Button myButton = (Button) findViewById(R.id.button1);
auf den Button1 des MainLayouts verweist und nicht auf den des ItemLayouts.
Wenn das gehen würde, müsstest du immer erst ein Item der ListView auswählen, drauf clicken, damit sich der Button initialisiert und dann auf den Button clicken.
Das wäre schon sehr ümständlich.

Da würde ich lieber die OnCreateView des Adapter überschreiben und den ganzen kram dort machen:

dataAdapter = new SimpleCursorAdapter(
            this, R.layout.country_info,
            cursor,
            columns,
            to,
            0)


{

@Override
public View getView(int position, View convertView, ViewGroup parent) {
if (!mDataValid) {
throw new IllegalStateException("this should only be called when the cursor is valid");
}
if (!mCursor.moveToPosition(position)) {
throw new IllegalStateException("couldn't move cursor to position " + position);
}
View v;
if (convertView == null) {
v = newView(mContext, mCursor, parent);
} else {
v = convertView;
}

        //hier dann Text und Button Handling rein

        bindView(v, mContext, mCursor);
        return v;
    }

}
;

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten