Android Listview Item Position

  • Antworten:3
abg jid
  • Forum-Beiträge: 51

05.05.2015, 17:09:47 via Website

Hi,

also um mein Problem zu erläutern, ich habe eine ListView wenn ich dann über die suche Item 2 suche und darauf klicke teilt er dass was in Item 1 steht.
Mein 2. Problem ist dass ich ohne die Items zu suchen nicht darauf klicken kann.

public class AutoActivity extends Activity implements OnItemClickListener {
private ListView lv1;
ArrayAdapter<String> adapter;
EditText inputSearch;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    ThemeUtils.onActivityCreateSetTheme(this);
    setContentView(R.layout.auto);
    final String products[] = getResources().getStringArray(R.array.auto);
    lv1 = (ListView) findViewById(R.id.listView1);
    inputSearch = (EditText) findViewById(R.id.inputSearch);
    adapter = new ArrayAdapter < String > (this, R.layout.list_item, R.id.product_name, products);

    lv1.setAdapter(adapter);
    inputSearch.addTextChangedListener(new TextWatcher() {
        @Override
        public void onTextChanged(CharSequence cs, int arg1, int arg2, int arg3) {
            // When user changed the Text
            AutoActivity.this.adapter.getFilter().filter(cs);
        }

        @Override
        public void beforeTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) {
            // TODO Auto-generated method stub
        }

        @Override
  public void afterTextChanged( Editable arg0) {
            // TODO Auto-generated method stub


    lv1.setOnItemClickListener(new OnItemClickListener() {
        public void onItemClick(AdapterView<?> parent, View view,int position, long arg3) {
                    String name= adapter.getItem(position);

            Log.d("id", name);
            if (position == 0) {
                Intent shareIntent = new Intent(android.content.Intent.ACTION_SEND);
                shareIntent.setType("text/plain");
                String shareMessage = "Share Item 1";
                shareIntent.putExtra(android.content.Intent.EXTRA_TEXT,shareMessage);
                startActivity(Intent.createChooser(shareIntent, "Entscheiden Sie über was Sie teilen möchten:"));
            } else if (position == 1) {
                Intent shareIntent1 = new Intent(android.content.Intent.ACTION_SEND);
                shareIntent1.setType("text/plain");
                String shareMessage1 = "Share Item 2";
                shareIntent1.putExtra(android.content.Intent.EXTRA_TEXT,shareMessage1);
                startActivity(Intent.createChooser(shareIntent1, "Entscheiden Sie über was Sie teilen möchten:"));
            }
                        }

            });
        }
    });
}

@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
    // TODO Auto-generated method stub

}

}

Ich hoffe jemand kann mir helfen Danke.

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

05.05.2015, 20:35:52 via Website

Das mit dem problem dass du suchen muss liegt daran, dass du den onClick Listener in der Methode afterTextChanged setzt. Ich denke das war nicht beabsichtigt sondern nur ein Klammerfehler.
Jetzt schau mal ob sich dein Problem behoben hat.

PS: Das andere Problem ist auch klar. Wenn du suchst ist dein Item 2 an der 1. (bzw. 0.) Position. Dann geht er antürlich in der if auch in den Zweig für Pos=0

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

Antworten
abg jid
  • Forum-Beiträge: 51

05.05.2015, 21:47:18 via Website

Hi,

Danke es funktioniert.

Und beim 2.Problem ist der Grund mir bekannt, hoffe aber jemand kann mir erklären wie ich dass umgehen kann.

— geändert am 05.05.2015, 23:47:49

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

06.05.2015, 07:05:04 via Website

Du kannst das umgehen, indem du das ganze dynamisch machst und es nur auf den Content des Items ankommt, welches du Teilst.
Du darfst nur die Position da nicht verwenden (bis auf adapter.get(pos)). Warum musst du überhaupt die Items untereinander unterscheiden, biher macht er doch bei beiden Positionen das selbe (bis auf eine Stringänderung).

Für die Lösung ist es weichtig zu wissen was daraus später mal werden soll, denn es gibt mehere Möglichkeiten diesen Fehler aus dem Weg zu räumen, die Frage ist nur welche für deine Anwendung am Besten ist.

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

Antworten