के साथ ListView में आइटम्स पर क्लिक नहीं कर सकता मैं एक ऐसा एप्लिकेशन लिखने की कोशिश कर रहा हूं जो डेटाबेस से आइटम लेता है और सूची दृश्य में पंक्तियों को पॉप्युलेट करता है। मैं पंक्तियों पर टैप करने के बाद आइटम पर क्लिक नहीं कर सकता हूं और डीपीएड किसी भी पंक्ति में नहीं जायेगा। मैं एक कस्टम एडाप्टर का उपयोग कर रहा हूँ।कस्टम एडाप्टर
Tweet.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="?android:attr/listPreferredItemHeight"
android:padding="6dip"
android:orientation="vertical">
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal" >
<TextView
android:id="@+id/textUser"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textStyle="bold"
android:text="NAME"/>
<TextView
android:id="@+id/textDate"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="#333333"
android:text="DATE" />
</LinearLayout>
<TextView
android:id="@+id/textTweet"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="TWEET" />
</LinearLayout>
Activity_main.xml
<?xml version="1.0" encoding="UTF-8"?>
<ListView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/listView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
tools:context=".MainActivity" >
</ListView>
onCreate विधि
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ListView view = (ListView) findViewById(R.id.listView);
MyArrayAdapter theAdapter = new MyArrayAdapter(tweetDb,this);
//setContentView(theAdapter.getView(0, null, null));
view.setAdapter(theAdapter);
view.setOnItemClickListener(new OnItemClickListener()
{
@Override
public void onItemClick(AdapterView<?> parent, View v, int position,
long id)
{
//Tweet theTweet = (Tweet)parent.getAdapter().getItem(position);
//saved.insert(theTweet);
Toast.makeText(getApplicationContext(), "Saved", Toast.LENGTH_LONG).show();
Log.v("SCHEMA", "onItemClick fired!");
}
});
}
एडाप्टर कक्षा getView
@Override
public View getView(int position, View convertView, ViewGroup parent)
{
LayoutInflater inflater = (LayoutInflater)context.getSystemService(
Context.LAYOUT_INFLATER_SERVICE
);
View tweetView = inflater.inflate(R.layout.tweet, null);
TextView textTweet = (TextView) tweetView.findViewById(R.id.textTweet);
textTweet.setText(items.get(position).getTweet());
textTweet = (TextView)tweetView.findViewById(R.id.textUser);
textTweet.setText(items.get(position).getName());
textTweet = (TextView)tweetView.findViewById(R.id.textDate);
textTweet.setText(textFormat.format(items.get(position).getCreated()));
return tweetView;
}
MyArrayAdapter कक्षा
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import android.content.Context;
import android.database.Cursor;
import android.database.DataSetObserver;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.ListAdapter;
import android.widget.TextView;
import android.widget.Toast;
public class MyArrayAdapter implements ListAdapter
{
private ArrayList<Tweet> items;
private Context context;
private SimpleDateFormat textFormat = new SimpleDateFormat("E MMM dd HH:mm:ss z yyyy");
public MyArrayAdapter(TweetDbSource db, Context context)
{
items = new ArrayList<Tweet>();
this.context = context;
Cursor cursor = db.getReadableDatabase().query("Tweet", null, null, null, null, null, null);
while (!cursor.isLast())
{
cursor.moveToNext();
items.add(new Tweet(cursor.getLong(0),cursor.getLong(1),cursor.getString(2),cursor.getString(3),
cursor.getString(4),new Date(),cursor.getInt(6)));
}
}
@Override
public int getCount()
{
return items.size();
}
@Override
public Object getItem(int position)
{
return items.get(position);
}
@Override
public long getItemId(int position)
{
return position;
}
@Override
public int getItemViewType(int arg0)
{
// TODO Auto-generated method stub
return 0;
}
@Override
public View getView(int position, View convertView, ViewGroup parent)
{
LayoutInflater inflater = (LayoutInflater)context.getSystemService(
Context.LAYOUT_INFLATER_SERVICE
);
OnClickListener saveTweet = new OnClickListener()
{
public void onClick(View v)
{
Toast.makeText(v.getContext(), "Saved", Toast.LENGTH_LONG).show();
}
};
View tweetView = inflater.inflate(R.layout.tweet, null);
TextView textTweet = (TextView) tweetView.findViewById(R.id.textTweet);
textTweet.setText(items.get(position).getTweet());
textTweet = (TextView)tweetView.findViewById(R.id.textUser);
textTweet.setText(items.get(position).getName());
textTweet = (TextView)tweetView.findViewById(R.id.textDate);
textTweet.setText(textFormat.format(items.get(position).getCreated()));
return tweetView;
}
@Override
public int getViewTypeCount()
{
// TODO Auto-generated method stub
return 1;
}
@Override
public boolean hasStableIds()
{
// TODO Auto-generated method stub
return false;
}
@Override
public boolean isEmpty()
{
// TODO Auto-generated method stub
return items.size() == 0;
}
@Override
public void registerDataSetObserver(DataSetObserver arg0)
{
// TODO Auto-generated method stub
}
@Override
public void unregisterDataSetObserver(DataSetObserver arg0)
{
// TODO Auto-generated method stub
}
@Override
public boolean areAllItemsEnabled()
{
// TODO Auto-generated method stub
return false;
}
@Override
public boolean isEnabled(int arg0)
{
// TODO Auto-generated method stub
return false;
}
}
टोस्ट या लॉग काम नहीं कर रहा है कि कैसे मैं यह काम नहीं कर रहा है
अपडेट किया गया getView विधि
बता सकते हैpublic View getView(int position, View convertView, ViewGroup parent)
{
OnClickListener SaveView = new OnClickListener() {
@SuppressLint("NewApi")
public void onClick(View v)
{
Toast.makeText(v.getContext(), "Saved", Toast.LENGTH_LONG).show();
v.callOnClick();
}
};
LayoutInflater inflater = (LayoutInflater)context.getSystemService(
Context.LAYOUT_INFLATER_SERVICE
);
View tweetView = inflater.inflate(R.layout.tweet, null);
TextView textTweet = (TextView) tweetView.findViewById(R.id.textTweet);
textTweet.setText(items.get(position).getTweet());
textTweet = (TextView)tweetView.findViewById(R.id.textUser);
textTweet.setText(items.get(position).getName());
textTweet = (TextView)tweetView.findViewById(R.id.textDate);
textTweet.setText(textFormat.format(items.get(position).getCreated()));
tweetView.setOnClickListener(SaveView);
return tweetView;
}
अद्यतन
मुद्दा हल किया गया था और मैं इसे समझ से बाहर: डी मैं अपने अनुकूलक वर्ग के भीतर के बजाय सच इन दोनों तरीकों में झूठी लौटना पड़ा!
@Override
public boolean areAllItemsEnabled()
{
return true;
}
@Override
public boolean isEnabled(int arg0)
{
return true;
}
इस प्रश्न से संबंधित है, लेकिन अगर (convertView == नल) उसके बाद ही आप इसे हवा भरना चाहिए फिर से उपयोग convertView, करने के लिए अनुशंसित नहीं है। अन्यथा कनवर्ट व्यू –
का पुनः उपयोग करें, आपको अपना 'MyArrayAdapter' कोड शामिल करना चाहिए क्योंकि यह आपकी समस्या का स्रोत भी हो सकता है। – andr
मैंने MyArrayAdapter क्लास कोड – AndroidNoob