2016-04-28 14 views
0

AdapterListView onItemClickListener funktioniert nicht. Onclick arbeiten doesnot

package ooad.issuemanagementsystem; 
import android.app.Activity; 
import android.content.Context; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.ArrayAdapter; 
import android.widget.CheckBox; 
import android.widget.TextView; 
import java.util.ArrayList; 

public class ManagerAdapter extends ArrayAdapter<Issue> { 
Context c; 
int layoutFile; 
ArrayList<Issue> data; 
public ManagerAdapter(Context context, int resource, ArrayList<Issue> objects) { 

    super(context, resource, objects); 
    c = context; 
    layoutFile = resource; 
    data = objects; 
} 
@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    View row; 
    if(convertView == null) 
    { 
     LayoutInflater inflater = ((Activity) c).getLayoutInflater(); 
     row = inflater.inflate(R.layout.manager_row, parent, false); 
    } 
    else { 
     row = (View) convertView; 
    } 
    TextView t1 = (TextView) row.findViewById(R.id.textView32); 
    TextView t2 = (TextView) row.findViewById(R.id.textView31); 
    t1.setText(data.get(position).getTitle()); 
    t2.setText(data.get(position).getDescription()); 
    CheckBox c = (CheckBox) row.findViewById(R.id.checkBox2); 
    c.setClickable(false); 
    if(data.get(position).getOpen().equals("true")) 
     c.setChecked(false); 
    else 
     c.setChecked(true); 


    return row; 
} 
} 

Aktivität

package ooad.issuemanagementsystem; 
import android.content.Context; 
import android.content.Intent; 
import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.util.Log; 
import android.view.View; 
import android.widget.AdapterView; 
import android.widget.ListView; 
import android.widget.Toast; 
import com.parse.FindCallback; 
import com.parse.Parse; 
import com.parse.ParseException; 
import com.parse.ParseObject; 
import com.parse.ParseQuery; 
import java.util.ArrayList; 
import java.util.List; 
public class ManagerActivity extends AppCompatActivity { 
Context con; 
String DeleteObject; 
String dept; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_manager); 
    con = this; 
    Intent i = getIntent(); 
    dept = i.getStringExtra("dept"); 
    ListView l = (ListView) findViewById(R.id.listView3); 
    ArrayList<Issue> reports = new ArrayList<Issue>(); 
    reports.add(new Issue("","","","","")); 
    ManagerAdapter adapter = new ManagerAdapter(this,R.id.listView3,reports); 
    l.setAdapter(adapter); 
    l.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
      /*Intent i = new Intent(con, IssueDetails.class); 
      i.putExtra("Title", reports.get(position).getTitle()); 
      i.putExtra("Description", reports.get(position).getDescription()); 
      i.putExtra("Category", reports.get(position).getCategory()); 
      i.putExtra("Id", reports.get(position).getID()); 
      i.putExtra("isOpen", reports.get(position).getOpen()); 
      startActivity(i);*/ 
      Toast.makeText(con, "hi", Toast.LENGTH_LONG).show(); 
     } 
    }); 
    //String Application_id = "AMavRlzklxFLKZAtEV7OGNyHYI3ByyRnhzhoUwLD"; 
    //String Client_id = "hMSZHpWUsCtKXgtAlmjugpcm2ycqKwYo6lCgWgX1"; 
    //Parse.initialize(c, Application_id, Client_id); 
    /*ParseQuery<ParseObject> query2 = ParseQuery.getQuery("ISSUES"); 
    query2.findInBackground(new FindCallback<ParseObject>() { 
     @Override 
     public void done(List<ParseObject> postList, ParseException e) { 
      if (e == null) { 
       for (ParseObject post : postList) { 
        String a = post.getObjectId(); 
        String b = post.getString("Title"); 
        String c = post.getString("Description"); 
        String d = post.getString("isOpen"); 
        String ee = post.getString("Category"); 
        reports.add(new Issue(a, b, d, c, ee)); 
        adapter.notifyDataSetChanged(); 
       } 
      } else { 
       Log.d(getClass().getSimpleName(), "Error: " + e.getMessage()); 
      } 
     } 
    });*/ 

    //adapter.notifyDataSetChanged(); 
    /*l.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() { 
     @Override 
     public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) { 
      DeleteObject = reports.get(position).getID(); 
      reports.remove(position); 
      adapter.notifyDataSetChanged(); 
      ParseQuery<ParseObject> query3 = ParseQuery.getQuery("ISSUES"); 
      query3.findInBackground(new FindCallback<ParseObject>() { 
       @Override 
       public void done(List<ParseObject> postList, ParseException e) { 
        if (e == null) { 
         for (ParseObject post : postList) { 
          String a = post.getObjectId(); 
          String b = post.getString("Title"); 
          String c = post.getString("Description"); 
          String d = post.getString("isOpen"); 
          String ee = post.getString("Category"); 
          if (a.equals(DeleteObject)) { 
           post.put("isOpen", "false"); 
           post.saveInBackground(); 
          } 
         } 
        } else { 
         Log.d(getClass().getSimpleName(), "Error: " +  e.getMessage()); 
        } 
       } 
      }); 
      return false; 
     } 
    });*/ 
} 
public void generateReport(View v) 
{ 
    Intent i = new Intent(con,GenerateReport.class); 
    i.putExtra("dept1",dept); 
    startActivity(i); 
} 
} 

Ich habe auf Click-Ereignis meiner Listview in meinem managerActivity hookied aber es funktioniert nicht. Ich habe auch meinen kundenspezifischen Adapter angeschlossen. Ich habe einen Test-Toast im Onclick-Ereignis angezeigt, aber es funktioniert nicht. Bitte helfen

+0

Was meinen Sie mit "nicht funktioniert"? – 0X0nosugar

+0

passiert nichts, wenn ich auf die Zeile tippen – user6040594

+0

Vielleicht bin ich blind, aber ich denke, dass Ihr Code gut aussieht. Es könnte also noch eine andere Möglichkeit geben: Android Studio schien in einigen Fällen eine alte Version der App zu behalten, so dass neuer Code nicht ausgeführt wurde (siehe zum Beispiel [hier] (http://stackoverflow.com/questions/36834389)) . Die Lösung schien zu sein, die alte Version zu deinstallieren und das Projekt zu bereinigen und dann auf dem Testgerät/Emulator zu installieren. – 0X0nosugar

Antwort

2

Fügen Sie die Zeile (android: descendantFocusability = "blocksDescendants") in Sie Adapter xml Eltern Layout und android einfügen: fokussierbarem = "false" in der Checkbox oder Button in der Adapter xml-Datei.

+0

danke, es hat gut funktioniert – user6040594

0

Überprüfen Sie die ausgewählte Antwort here - die eine Möglichkeit bietet, was Sie tun möchten. Aber auch wenn Sie this answer betrachten, müssen Sie bestätigen, dass Sie keine fokussierbaren Objekte in Ihrem Zeilenlayout setzen - weil dies verhindert, dass die ListView die Berührungsereignisse erhält.

Verwandte Themen